PHP mulithread

4 Cevap php

Geçenlerde okumuştum http://php.net/pcntl ve o PHP temel bir işlevi olmadığı için PHP çoklu kullanmak akıllıca ne kadar iyi olurdu fonksiyonları çalışır ve eğer woundering oldu.

Ben elle cronjob yürütme fireing gibi yoluyla geri bildirim gerekmez olayları tetiklemek isterim.

Hepsi Zend Framework ile yazılmış bir web uygulaması çalıştırmak gerekiyordu

4 Cevap

PCNTL paketi oldukça iyi çalışıyor - bu sadece göre unix functions kullanır. Sadece sıkıntısı php bir web sunucusu bağlamından çağrıldığında eğer bunları kullanamazsınız olmasıdır. yani web sayfalarında komut kabuk kullanmak, ama değil - en azından calling a forking script with exec ya da benzeri bir hack kullanmadan.

[edit] I just found a page explaining why mod_php cannot fork. Basically it's a security issue. [/edit]

Bu kontrolü iplik değil, bu süreç kontrolü. Parçacıkları için kütüphane pthreads (POSIX threads) ve PHP dahil değil, bu yüzden PHP herhangi bir multi-threading fonksiyonlar vardır.

Bu dev güvenlik açığı (olurken süreç tüm web sunucunun ayrıcalıkları olurdu) olacağı gibi çoklu itibariyle,, mod_php bu kullanamazsınız.

Birden çok iş parçacığı yürütme php kodu olması tek mümkün yolu ipler tamamen izole edilir ve kod onlar üzerinde hiçbir kontrole sahip çünkü yararsız bir dişli web sunucusu, bir modül olarak php çalıştırmak. As far as ı know, PCNTL sadece süreçleri değil, konuları yönetir.

Ben PHP manuel crontab infazları veya benzeri yapmak gerekirse, ben muhtemelen bir kuyruk kullanmak istiyorum. Eğer işleri append bir veritabanı tablo var. Onlar kadar göstermek gibi başka bir süreç, bir cron veya bir daemon olarak çalışan ya, işleri yürütür.

Bunu yapmak için başka bir yolu ayrı bir script kurmak ve bir HTTP kendisine GET yapmaktır. Oldukça parçacığı değil, ama PHP başka bir komuta bombardımanı bir yolu.

Ben talep /usr/bin/somescript.sh çalıştırmak istiyorsa Örneğin, ben bir somescript.php olurdu ki bir sistem çağrısı yaptı. Bu localhost'tan sadece erişilebilir bir sanal konak üzerinde olacaktır.

Ben webserver bir yuva arama yapmak ve komut GET ediyorum. Anahtarı engellemez not soket üzerinde okumaktır. Ben dönüş değerini kontrol etmek istedim somescript.php, ben engelleme önlemek için benim ana komut sonra yapardım.

somescript.php (çağıran komut daha uzun) yürütmek için uzun zaman alıyorsa, yuva kapatıldığında senaryoyu öldürme apache durdurmak için bazı büyü yapmak gerekecek.