Batalia async in limbaje compilate
Last Updated: Sep 07 2021 15:49, Started by
dani.user
, Aug 16 2021 17:21
·
0

#1
Posted 16 August 2021 - 17:21

[ https://www.youtube-nocookie.com/embed/Ws3jC6AJC_4?feature=oembed - Pentru incarcare in pagina (embed) Click aici ]
Folositi async in prezent? |
#3
Posted 16 August 2021 - 18:14

Da. PHP-istii nu au aceasta posibilitate. Dar e limbaj interpretat, nu compliat
|
#4
Posted 16 August 2021 - 18:28

#5
Posted 16 August 2021 - 18:48

Generator functions sunt tot o forma de async Se exista in PHP
In Java ai CompletableFuture, adica fix Promise din Javascript https://www.baeldung...mpletablefuture https://reactphp.org/ |
#6
Posted 16 August 2021 - 18:54

#7
Posted 16 August 2021 - 19:12

Generator functions sunt tot o forma de async Se exista in PHP In Java ai CompletableFuture, adica fix Promise din Javascript https://www.baeldung...mpletablefuture https://reactphp.org/ Nu au treaba generatoarele cu async. Generatoarele faciliteaza iterari pe structuri complexe. Async inseamna sa poti executa in pararel mai multe functii si sa ai control total asupra lor. ReactPHP ofera unele facilitati in acest sens, dar prea putine si cu multe limitari. Defapt e doar o suita de clase care face uz functia stream_set_blocking din PHP. Nu se compara cu async nativ. |
#8
Posted 16 August 2021 - 19:54

Async inseamna non-blocking IO
Atat Ca e pe acelasi thread, ca in Python, sau pe threaduri diferite, ca in Java. n-are conteaza Ideea e ca nu blochezi executia asteptand pe IO |
#9
Posted 17 August 2021 - 19:29

Uite aici legat de generator functions vs async
https://towardsdatas...it-8442d2c77185 Sau vezi "Fluent Python", capitolul despre generators /coroutines |
#10
Posted 18 August 2021 - 15:30

Parca era vorba de generatoarele din PHP ? Nimic asicron acolo
|
|
#11
Posted 18 August 2021 - 17:27

Generatoarele sunt la fel, indiferent de limbaj
function file_get_contentsss($url) { sleep(3); return file_get_contents($url); } function get() { $a = file_get_contentsss("http://www.evz.ro"); echo "async ................\n"; yield $a;//await return; } $s = get(); echo "After in code but executed first\n"; foreach ($s as $value) { echo substr($value, 0, 15); } |
#12
Posted 18 August 2021 - 19:56

Nu e acelasi lucru.
In codul tau file_get_contentsss va bloca tot scriptul |
#13
Posted 18 August 2021 - 20:55

Csf, ncsf
function file_get_contentsss($url) { //sleep(3); yield file_get_contents($url); } function get() { echo "async1 ................\n"; $a = file_get_contentsss("http://www.evz.ro"); yield from $a;//await echo "async2 ................\n"; return; } $s = get(); echo "After in code but executed first\n"; foreach ($s as $value) { echo substr($value, 0, 15), "\n"; } |
#14
Posted 18 August 2021 - 21:02

#15
Posted 18 August 2021 - 21:15

In Javascript cand scrii
const a = await fetch(...) ce crezi ca se intampla ? La un moment dat tot trebuie sa astepti Si culmea Javascipt are minimum 3 threaduri : main thread, micro-task , macro -task. Plus 1..n threaduri pentru service workers In Javascript s-a plecat de la "callback hell", s- a trecut prin Promise si s-a ajuns la async- await Dar constructul async-await e doar o modalitate de a scrie cod async intr-o maniera care pare sync In Javascript ai React-Redux care foloseste async, si ai si React-Saga, care foloseste generatoare De ce ? Pentru ca in Javascript generatoarele se executa pe alt thread In Python , desi e un singur thread, async e pe bune Sincer, nu cunosc exact detaliile de implementare a generatoarelor in PHP, dar aparent e jalnic O sa ma mai gandesc si poate revin |
|
#16
Posted 18 August 2021 - 21:57

Asa este, astepti pentru event loop sau acel thread pool, dar nu si pentru munca efectiva care o face o functie ca si fetch(). Si aia reprezinta partea cea mai mare a timpului.
Toate functiile native async sunt atribuite pe un thread separat de acel thread pool. E si configurabil numarul maxim de threaduri. La functiile async definite de user nu este asa, dar rareori ai nevoie sa executi o functie de a ta pe un thread separat. Cand ajungi la asa o situatie e clar ca vei deschide proces separat pentru ea, sau macar un worker thread. Si nu pentru ca nu suporta js-ul multithreading din main thread cu ceva sintaxa simpla, dar pentru ca este de porc sa pui la gramada functii nu au treaba una cu alta. Daca vreau sa reinventez fetch() este evident ca voi face script separat pentru asta, si il voi invoca la nevoie din scriptul principal |
#17
Posted 19 August 2021 - 09:10

Hai ca m-am lamurit
In Python face async pe bune pe un singur thread folosind modulul asyncio, care are la baza corutinele In Python o corutina este un generator care nu doar emite valori, dar si primeste a = yield value vs yield value In alte limbaje nu se face distinctia asta Echivalent in PHP ai https://amphp.org/ https://www.swoole.co.uk/ Si am vazut ca si https://reactphp.org/ are tot generatoarele la baza . Toate chestiile astea folosesc generatoare/corutine plus un event loop homemade, so to speak Dar ideea e ca se poate async pe bune in PHP |
#18
Posted 19 August 2021 - 10:01

Degeaba 'yield' poate actiona ca un 'await', daca iti lipsesc functiile asincrone. Nu exista asa ceva in php. Sa le implementezi tu prin streams si ceva event loop nu e tot una cu sa le ai la dispozitie nativ. Te lovesti rapid de tot felul de limitari. Incearca sa faci echilvalentul fwrite in mod async si vezi cum merge
|
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users