PHP多程式程式設計(2):管道通訊

發表於2016-04-04

一個程式如果是個人英雄主義,那麼多程式就是集體主義。(不嚴格區分多程式 和 多執行緒的差別)

你不再是一個獨行俠,而是一個指揮家。

獨來獨往,非常自由自在,但是,很多時候,不如眾人拾柴火焰高。

這就是我對多程式的理解。多執行緒程式設計的主要問題是:通訊 和 同步問題。

更多PHP 多執行緒程式設計的背景知識見:

PHP多程式程式設計(一)

在PHP 中,如果光用pcntl ,實現比較簡單的通訊問題都是很困難的。

下面介紹管道通訊:

1. 管道可以認為是一個佇列,不同的執行緒都可以往裡面寫東西,也都可以從裡面讀東西。寫就是

在佇列末尾新增,讀就是在隊頭刪除。

2. 管道一般有大小,預設一般是4K,也就是內容超過4K了,你就只能讀,不能往裡面寫了。

3. 預設情況下,管道寫入以後,就會被阻止,直到讀取他的程式讀取把資料讀完。而讀取程式也會被阻止,

直到有程式向管道寫入資料。當然,你可以改變這樣的預設屬性,用stream_set_block  函式,設定成非阻斷模式。

下面是我分裝的一個管道的類(這個類命名有問題,沒有統一,沒有時間改成統一的了,我一般先寫測試程式碼,最後分裝,所以命名上可能不統一):

有了這個類,就可以實現簡單的管道通訊了,因為這個教程是多程式程式設計系列教程的一個部分。

這個管道類的應用部分,將放到第三部分。

相關文章