Multithreading in PHP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Young Roger

Young Roger

21/10/2012 17:05:00
Quote Anchor link
Multithreaden in PHP is vanuit de core natuurlijk niet mogelijk, maar er zijn wel enkele omwegen. Ik vroeg me af hoe ik in bestand `loader.php` een x-aantal andere scripts kan aanroepen, zonder dat er gewacht wordt tot de scripts volledig uitgevoerd zijn, de scripts hoeven dan ook niks te returnen en wat de beste manier hier voor is. Heb het een en ander geprobeerd mbv exec(), maar hierbij wordt er gewacht tot het de execution klaar is, wat ik dus niet wil.
 
PHP hulp

PHP hulp

07/11/2024 22:39:26
 
Joren de Wit

Joren de Wit

21/10/2012 17:19:00
Quote Anchor link
Is het gebruik van AJAX een oplossing? De scripts worden dan weliswaar niet tegelijkertijd uitgevoerd, maar een webpagina die je laadt is wel gewoon beschikbaar terwijl de scripts op de achtergrond uitgevoerd worden...
 
Young Roger

Young Roger

21/10/2012 17:47:24
Quote Anchor link
Dat zou een oplossing kunnen zijn, maar het zijn scripts die intensieve taken uitvoeren en dus als ik deze laad met AJAX zijn ze volgens mij gevoelig voor een user abort, ook als ignore_user_abort(true), en set_time_limit(0) staan aangegeven. Tenminste, zoiets dacht ik ergens gelezen te hebben. Dus, als het mogelijk is, liever een pure PHP manier.
 
Ivo Breeden

Ivo Breeden

21/10/2012 21:54:34
Quote Anchor link
Ik heb er geen ervaring mee maar volgens mij moet je met pcntl-fork() een parallel proces kunnen starten.
 
Young Roger

Young Roger

21/10/2012 22:59:50
Quote Anchor link
Met pcntl_fork moet het inderdaad mogelijk zijn. Alleen moet ik nog een manier vinden om de zombies op te ruimen, aangezien je de parent moet killen als je een daemon wilt maken. Misschien een extra child forken om zodoende er een soort cleaner van te maken, die altijd blijft leven?

Toevoeging op 22/10/2012 00:08:26:

Uiteindelijk er toch voor gekozen om met exec te werken, omdat het gewoon irritant is om niet te kunnen multithreaden maar te moeten forken haha. Exec commando's kun je wel van de parent onafhankelijk maken, (forken ook, maar dan krijg je een zombie) op deze manier:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
exec("bash -c 'exec nohup setsid command > /dev/null 2>&1 &'");
?>


Dit is dus het eindresultaat, en het werkt. Nu maar wachten tot multithreaden naar PHP komt.
Gewijzigd op 21/10/2012 23:00:45 door Young Roger
 
Kris Peeters

Kris Peeters

22/10/2012 10:39:45
Quote Anchor link
Ik ken exec niet; ik zal er dan ook niet over tegenspreken.

Maar als ik hoor wat je wil, zou ik onmiddellijk aan Ajax denken.
Verder heb je trouwens ook de web worker.

Dan heb je een minimale tijd waarbij de gebruiker moet wachten op Apache (de pagina wordt geladen); en achter zijn rug wordt dat tweede verzoek uitgevoerd.
Je kan met javascript volledig zelf controleren in welke volgorde het moet; wie op wie moet wachten, ...
En ondertussen kan de gebruiker verder doen wat hij wil.
 
TJVB tvb

TJVB tvb

22/10/2012 10:59:11
Quote Anchor link
Wat denk je hier van? http://nl1.php.net/thread

Ik snap trouwens wel dat je niet via ajax wilt gaan werken. Maar met exec lijkt me ook niet ideaal
Gewijzigd op 22/10/2012 10:59:53 door TJVB tvb
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.