PHP multithreading in še kaj
 
b00mbar 29. jun 2011 11:54:54 Pridružen od:
18. jun 2008
350 objav
554 127 18
#1

Ta tema je nekje med programiranjem in administracijo strežnikov... rabim strokovnjake obojega :)



Iščem rešitev za PHP multithreading (MT v bodoče), ki je učinkovit oz. je približno podoben pravemu MT. Malo raziskujem, ampak mi manjka nekaj znanja na administracijiskem koncu.



Rešitev za simulacijo MT v PHP je kar nekaj (1,2,3,4,5).



Vseeno, kolikor jaz razumem, to ni v resnici multithreading ampak je forking. Kaj točno je razlika z vidika strežnika?

Je sploh možno v PHPju imeti kontrolo nad več različnimi procesi na strežniku?



Če bi vi potrebovali MT in skalabilnost neke aplikacije, bi za vsako ceno šli na drugo (Java) platformo?



Je kdo že implementiral kaj temu podobnega?



PS. še tole, funkcija proc_open... kakšen 'proces' se dejansko pojavi na strežniku ob uporabi te funkcije?



Hvala!


všeč(2) ni všeč(0) spam(0)
Garantirano najhitrejše pure SSD Reseller gostovanje ( PHP7.1, Opcache, Nginx, MariaDB, Let's encrypt) | Brezplačna selitev strani in pošte | 400+ domen po izjemnih cenah
www.neoserv.si
 
b00mbar 29. jun 2011 12:20:50 Pridružen od:
18. jun 2008
350 objav
554 127 18
#2

Po branju tega članka, mi je PHP forking jasen, zato malo spreminjam vprašanje glede tega.



Torej forking pomeni spawnat child procese, ki potem vsak lahko izvaja svoje naloge. Parent process med tem lahko čaka da končajo in potem tudi veš uspešnost zaključenih childov. Rešitev je dokaj simple, nevem pa kaj pomeni iz vidika performans ali so procesi childi nekege drugega, ali pa so to dejansko 'pravi' različni procesi?



Definitivno je neka slabost forkinga, sicer ne bi bilo toliko govora o tem da PHP ni MT.


všeč(2) ni všeč(0) spam(0)
Garantirano najhitrejše pure SSD Reseller gostovanje ( PHP7.1, Opcache, Nginx, MariaDB, Let's encrypt) | Brezplačna selitev strani in pošte | 400+ domen po izjemnih cenah
www.neoserv.si
 
b00mbar 29. jun 2011 13:04:49 Pridružen od:
18. jun 2008
350 objav
554 127 18
#3

Sry za spam.. še nekaj sem odkril: executanje procesov preko CLI



To pa dejansko naredi nov proces, ampak verjetn moraš potem imeti fully working php skripto, da jo zaženeš. To deluje če laufa PHP pod apachejem?


všeč(2) ni všeč(0) spam(0)
Garantirano najhitrejše pure SSD Reseller gostovanje ( PHP7.1, Opcache, Nginx, MariaDB, Let's encrypt) | Brezplačna selitev strani in pošte | 400+ domen po izjemnih cenah
www.neoserv.si
 
jurij123 29. jun 2011 13:15:01 Pridružen od:
20. nov 2010
572 objav
675 148 10
#4

Zivjo.



Jaz resim multi threading tako, da pac v ozadju odprem se eno instanco skripte --> lahko preko fsockopen, curl, ...



Dela super.


všeč(2) ni všeč(0) spam(0)
 
bl4ckb1rd 29. jun 2011 13:22:41 Pridružen od:
18. avg 2008
1122 objav
750 91 11
#5

fork pobere veliko več resursov kot thread, saj je v bistvu to spawnanje novega procesa, kar pomeni da dobi nov pid, ima svoj memory space, medtem ko thread tega nima. Kreiran je virtualno, veliko manj časa porabi za spawnanje/ubijanje/obdelovanje podatkov, ne dostopa direktno do OS-a ampak do aplikacije same. Skratka, forking je slaba verzija multithreadinga. Če imaš namen spawnati ogromno "threadov/forkov" kar je načeloma poanta multithreadinga/multiprocessinga se boš moral poslužiti drugega programskega jezika. PHP ima to slabo zrihtano, niti ni namenjen temu.


všeč(3) ni všeč(0) spam(0)
blackbird.si - Moj plac za odlaganje problemov in rešitev...
 
b00mbar 29. jun 2011 15:10:36 Pridružen od:
18. jun 2008
350 objav
554 127 18
#6

OK, v bistvu se gre samo za problem skalabilnosti. V primeru, da uporabim curl_multi funkcije, zato da vzporedno delam requeste na neke sajte naprimer. To ni multithreading ampak sigurno deluje brez problema, zanima me, kako to potem skalirati. Naprimer da se pojavi potreba, da je teh requestov par tisoč na par minut? Je možno to 'strežniško' nadgrajevat, da bi to pelal?


všeč(2) ni všeč(0) spam(0)
Garantirano najhitrejše pure SSD Reseller gostovanje ( PHP7.1, Opcache, Nginx, MariaDB, Let's encrypt) | Brezplačna selitev strani in pošte | 400+ domen po izjemnih cenah
www.neoserv.si
 
bl4ckb1rd 29. jun 2011 16:54:14 Pridružen od:
18. avg 2008
1122 objav
750 91 11
#7

Curl je multithreading in ne spawna posebnih procesov za izvajanje... Raje povej koliko hkratnih threadov rabiš za en request in koliko ljudi bo naenkrat gor, ne koliko na par minut, to ni merilo... Načeloma pa 1000 hkratnih threadov niti približno ne bo šlo skozi... vsaj ne z cURL-om... Meni se je pri parsanju določenih stvari zataknilo tam pri 500 threadov naenkrat...


všeč(3) ni všeč(0) spam(0)
blackbird.si - Moj plac za odlaganje problemov in rešitev...
 
b00mbar 30. jun 2011 07:24:39 Pridružen od:
18. jun 2008
350 objav
554 127 18
#8

Včeraj sem testiral curl_multi, naredil 10,100 in nato še 1000 hkratnih requestov na različne sajte. Sprocesiralo se je v 10, 16, 38 sekundah. Iz mojega 5 let starega laptopa, in siolove 4mb linije.

V bistvu zadeva ni mišljena sploh tako, da bodo ta procesiranja direktno prožili uporabniki. Oni bi jih naprimer dajali v queue na magar drugem strežniku. Ta strežnik, pa bi imel potem nalogo samo sprocesirat 'čimveč' v čimkrajšem času, toliko da še pelje. Sam bi naprimer določil, koliko mu rata narest naenkrat. Upam da nisem zabluzil. Veš kaj mislim?


všeč(2) ni všeč(0) spam(0)
Garantirano najhitrejše pure SSD Reseller gostovanje ( PHP7.1, Opcache, Nginx, MariaDB, Let's encrypt) | Brezplačna selitev strani in pošte | 400+ domen po izjemnih cenah
www.neoserv.si
 
bl4ckb1rd 3. jul 2011 23:26:27 Pridružen od:
18. avg 2008
1122 objav
750 91 11
#9

Razumem. Potem to načeloma ne bi smelo biti prehudo. Drugače pa še vedno lahko več instanc tega programa nardiš, pa "load balancing" :)) tko da to bi šlo.


všeč(3) ni všeč(0) spam(0)
blackbird.si - Moj plac za odlaganje problemov in rešitev...
 
bl4ckb1rd 3. jul 2011 23:41:40 Pridružen od:
18. avg 2008
1122 objav
750 91 11
#10

aja pa še neki... pazi da pametn timeout nastavljaš, čene traja predolgo... tle lahko zreduciraš izvajanje za ogromno. po defaultu ne vem kolk je, ampak velik preveč.


všeč(4) ni všeč(0) spam(0)
blackbird.si - Moj plac za odlaganje problemov in rešitev...
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se