2010-08-27 66 views
0

任何人都可以描述如何在PHP編程中實現線程嗎?我所知道的是,PHP不支持線程概念。不過,如果我錯了,請糾正我。在PHP中執行線程處理

如果可能,請嘗試提供一些關於PHP線程示例的細節。

如果可能的話,任何人都可以提供一些關於PHP模塊的線程安全的細節嗎?我知道這是市場上的一個熱門話題,但沒有像我這樣的傻人可以理解的細節。

任何幫助,非常感謝。

+0

您能否準確指定您想要使用線程的目的。你想同時運行兩個或更多PHP腳本來執行一個主要操作? – 2010-08-27 05:22:03

+0

@Maulik - 我沒有任何這樣的例子。我只是想用現實世界的例子來清理線程概念。請提供一些編程邏輯的例子。 – 2010-08-27 05:58:23

回答

2

線程是PHP的開發路線圖,但在當前版本的PHP中是不可能的。沒有線程產生函數,沒有線程處理函數,沒有線程同步函數等等。另外,大多數PHP插件/模塊/庫需要重寫以安全地處理線程,因爲它們不是用任何東西構建的,考慮到線程執行。

作爲一個人爲的例子......您正在PHP中執行數據導入腳本,並啓動多個線程來解析數據塊並將其插入到數據庫中。 mysql_insert_id()會返回什麼?由於在PHP中沒有任何線程可以識別,所以您可能很好地從一個完全不同的線程中執行插入操作獲取ID。

你當然可以使用PHP來fork()popen()proc_open()等..到了一個腳本的火多個副本,並運行這些併發,但是這只是多處理。每次都會有它自己的環境,內存,文件處理等..

+0

感謝您提供這樣的信息答案。但是你也可以在PHP中強調一下關於線程安全模塊的內容,因爲這裏有一些關於它們的提及,儘管對於那些假人來說並不完全清楚。再一次,謝謝。 – 2010-08-27 05:56:28

+0

大多數情況下它們都在那裏,所以PHP可以在IIS下運行,這是一個多線程服務器。但是IIS下的PHP腳本仍然無法啓動自己的線程 - 語言中根本沒有任何東西允許它。 – 2010-08-27 10:14:24

0

5年以後...

你好
下面是關於如何在PHP中實現線程的例子:

class Test extends Thread { 
    public function run() { 
     print "I'm running in new Thread, i will finish my job in 20 seconds"; 
     sleep(20); 
    } 
} 

test = new Test(); 
test->start(); 
print "I'm the main thread and i don't have to wait 20 seconds"; 

下面的鏈接,官方文檔PHP_PTHREADS

希望幫助:)