工作者線程具有持久狀態:當你開始工作線程,工人可用於執行,直到變量超出範圍或工人處於停機狀態。
舉一個腳本示例,該腳本可以從多個來源聯機下載多個頁面:在很小的範圍內,您可能會擺脫困境,它可能是擁有多個線程的最佳設計,每個線程處理單個請求並處理內容。但是,通常情況下,開始一個線程發出一個請求或者執行任何非常簡單的操作,您應該認爲這是一項巨大的浪費,相反,您可以啓動儘可能多的工作人員,因爲您的硬件和環境可以管理,並實現請求和處理內容作爲一個Stackable。使用Worker時,每個請求不會花費您對線程上下文的初始化。在這種情況下的持久性是指每個Stackables可以讀取$ this-> worker,並訪問所有/任何全局(包括類級靜態變量)作用域,因此從Stackable的角度來看,在執行期間工人堅持,實際上Stackables只是共享一個上下文。
互斥和電導率是有鐵桿POSIX線程成癮者,以及並行線程本身的發展過程中我的目的。普通用戶不應該真的需要使用這個功能,儘管它與對應的posix函數一樣都有文檔記錄,並且大部分原始文檔仍然適用(頂層有一層明智的文檔)。 Mutex和Cond都是熟悉功能的精簡包裝,並不是真正針對Joe Bloggs。
我想如果互斥體,以便有安全的閱讀和對象的寫作需要你想知道,這是不是這樣,安全性被內置到並行線程。
你應該使用一個工作線程的時間將是;從這個例子來看,它的規模很小。此外,如果您有硬件來支持它,線程可以創建工人(和線程),這可以爲更復雜的系統設計提供可能性。在這種情況下,你也可能會變得很棒,在這種情況下,你可以將你的線程編程爲像工作人員一樣工作,而不需要爲每個任務開始對象初始化(堆棧)。 Worker是一個線程,只有Thread的某些功能被用來執行一個Stackables的列表,你會注意到Thread和Worker的同步方法的細微差別,如果你按照預期使用工作者,這並不重要。但是,如果您的真棒導致您認爲避免使用標準模型會更好,那麼您將需要來自Thread對象的同步來實現PHP中的Worker模式。
事實是,如果你正在尋找線程,你一次只想做兩到三件事情,那麼你很可能會找到辦法做一些事情。因此,提供Worker/Stackable功能作爲pthreads包的一部分是有意義的,因爲它更適合在不同的上下文中執行一堆事情,所以在PHP中編寫這些東西(即使在pthread的幫助下)也是非常棘手的。
謝謝!這是一個巨大的幫助。儘管我的代碼正在工作,但我的方式並不順利。我仍然想知道什麼時候可以使用純色的Thread對象。 – marlonp33
好的,我更新了線索上的一些關於...的信息,希望能夠完全回答你的問題。 –
我不得不多次閱讀這些內容才能理解你的意思。但是謝謝! – Nerrve