2011-08-16 75 views
0

據我所知,PHP不支持多線程,但我很想知道是否有一個很好的解決方案,以執行PHP中的幾個函數併發?我寫了一些計算不變性矩的代碼。有七個函數計算每個時刻,隨後每個時刻隨後比較慢地完成執行。

歡迎任何建議。

謝謝多線程在PHP

+0

php是多處理,使用'pcntl_fork'使這成爲可能! – linuxeasy

回答

2

看來gearman是你所需要的。還有一個php extension

+0

謝謝伊萬的建議。我在一個沒有管理權限的環境下工作,但是我肯定會爲了自己的滿意度和知識對這個問題進行研究,所以再次感謝。 – John

+0

@Ivan Gearman對於多重處理也不錯。自2012年以來,多線程已在PHP中可用。請查看[** Pthreads **](http://pthreads.org)。另外[** PHP App Server **](http://www.appserver.io)已經使用pthreads構建。 – webblover

+0

是的,但答案是早於2012年:) – Ivan

0

而且看一看的pcntl_fork功能(pcntl_fork

我一般用它來從一個工人的孩子產卵。然後,我使用主線觀看孩子,處理收穫的死亡孩子併產生新的孩子。

+0

不是跨平臺,因爲它不適用於Windows!它關於創建新進程而不是線程! – linuxeasy

0

除了通過fork調用新進程,大多數現代操作系統(甚至包括MSWindows)都可以從shell生成非阻塞進程,儘管其語法不盡相同。所以你可以使用the various program execution functions來調用它們。

另一種方法是將功能拆分成多個URL(可能限制對本地主機的訪問),然後使用curl_multi_exec()從控制腳本調用它們(請注意,這比將它們作爲單獨進程運行效率可能更低反過來會比通過叉子運行效率低)。

然而,關於如何在多線程/進程之間對進程進行分片的任何討論都由進程本身是否可分片的問題來決定。另外,分片是否會提高性能。我會把這些問題留給你。