popen實現PHP併發方法

2021-05-02 05:40:03 字數 1122 閱讀 5297

# get argument for pipe here if it has.

#start pipe

echo

'call popen start: '.

date

("h:i:s"

), "/n";

$pipe = popen

(dirname

(__file__

) .

'/t.sh',

'r');

echo

'call popen end: '.

date

("h:i:s"

), "/n";

#other code here

sleep (5

); echo

"here is my code. time: " .

date

("h:i:s"

), "/n";

#read pipe result

while

($s =

fgets

($pipe,

1024))

pipe指令碼:

echo

1, `date +%t`;

sleep

1; echo

2, `date +%t`;

sleep

10;echo

3, `date +%t`;

輸出如下:

call popen start: 10:16:40

call popen end: 10:16:40

here is my code. time: 10:16:45

1, 10:16:40

2, 10:16:41

3, 10:16:51

**方面, 我們有三個sleep。

php中乙個 sleep 5,

sh中兩個sleep, 10+1

如果使用序列的方式, 那麼用時應該是10+1+5 = 16秒。

而使用pipe方式, 用時僅為:max(php, pipe) = max(5,11) = 11秒。

ps:很抱歉,空間服務商看起來不喜歡popen這個字眼, 所以只能將起替換成全形的了。請在使用時,替換一下吧:)

自己實現popen函式

閒來無事,自己實現了popen函式mypopen,後來檢視了popen函式的原始碼發現自己實現的與其相差無幾,本函式與linux中的實現最大的不同是不需要用專門的pclose 函式來關閉檔案指標,用普通的fclose 即可,linux實現的 也會給出在下文,可以對比一下其中差異。主要通過pipe管道...

popen函式的實現

注 本文 本人有修改對 open max 的呼叫 popen函式的實現包括一下幾步 1 使用pipe 建立管道 2 使用fork 建立子程序 3 在子程序中呼叫exec族函式執行命令,通過管道將結果傳送至父程序 4 在主程序中等待子程序執行,子程序執行完成後將接收其結果,返回結果的檔案指標 類似與s...

popen函式的實現

popen函式的實現包括一下幾步 1 使用pipe 建立管道 2 使用fork 建立子程序 3 在子程序中呼叫exec族函式執行命令,通過管道將結果傳送至父程序 4 在主程序中等待子程序執行,子程序執行完成後將接收其結果,返回結果的檔案指標 類似與system fork與exec函式的組合 pope...