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.
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...
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.
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?
[size=xsmall]Toevoeging op 22/10/2012 00:08:26:[/size]
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:
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.