我們在做專案的時候,有些需求,特別是資料的響應處理需要花費大量的時間,由於php是乙個短生命週期的指令碼語言,到了預設的30秒,php的資料處理還沒完成,php的生命週期就結束了。這時需要使用非同步併發處理策略,也就是說,一次php呼叫可以發出的多個請求,這些請求不是按照順序執行,而是可以非同步併發執行的,一些請求用於在後台處理資料,一些請求用於接受後台響應狀態,根據狀態,與使用者做一些簡單的互動。但是問題來了,我們都知道php本身是不支援多執行緒的,那麼應該怎麼實現php的多執行緒呢?
1、linux下的php多執行緒
下面所講的東西是源自php的pcntl_fork函式.因為這個函式依賴作業系統fork的實現,所以本文所講的東西只適用於linux/unix。那麼先看看這個函式的用法吧.php手冊上是這麼說的:
<?php
$pid = pcntl_fork();
if ($pid == -1) else if ($pid) else
?>
通過pcntl_fork建立乙個子程序,如果返回值是-1的話,那麼說明子程序建立失敗.建立成功的程序id會返回給父程序,0返回給子程序.不好理解吧,所以應該這樣寫:
<?php
$pid = pcntl_fork();
if($pid == -1)
else
else
}?>
這樣一改好理解多了,如果你父程序希望知道子程序正常退出的話,可以加上前面的pcntl_wait。
2.通過stream_socket_client 方式
functionsendstream() else
$data = json_encode($send_data[$k]['body']);
$s = stream_socket_client($host . ":80", $errno, $errstr, $timeout, stream_client_async_connect | stream_client_connect);
if ($s) else
} while (count($sockets)) else
} } else
} print_r($result);
}
3、通過多程序代替多執行緒
functiondaemon($func_name,$args,$number)elseif($pid)
}else
}else
exit();
} }
} functionworker($args)
daemon('worker',array(1),2);
php真正的多執行緒實現方式,通過安裝php的擴充套件 pthread 可以做到。
然後重新整理的頁面如下,拖到最底部:
注意:您的php 在編譯的時候需要開啟 –enable-maintainer-zts
./configure --prefix=/usr/local/php --disable-fileinfo --enable-fpm --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-openssl --with-zlib --with-curl --enable-ftp --with-gd --with-xmlrpc --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-gd-native-ttf --enable-mbstring --with-mcrypt=/usr/local/libmcrypt --enable-zip --with-mysql=/usr/local/mysql --without-pear --enable-maintainer-zts
vim /etc/php.ini
新增extension=pthreads.so
重啟php
/etc/init.d/php-fpm restart
通俗易懂的php多執行緒解決方案
我們在做專案的時候,有些需求,特別是資料的響應處理需要花費大量的時間,由於php是乙個短生命週期的指令碼語言,到了預設的30秒,php的資料處理還沒完成,php的生命週期就結束了。這時需要使用非同步併發處理策略,也就是說,一次php呼叫可以發出的多個請求,這些請求不是按照順序執行,而是可以非同步併發...
通俗易懂的php多執行緒解決方案
我們在做專案的時候,有些需求,特別是資料的響應處理需要花費大量的時間,由於php是乙個短生命週期的指令碼語言,到了預設的30秒,php的資料處理還沒完成,php的生命週期就結束了。這時需要使用非同步併發處理策略,也就是說,一次php呼叫可以發出的多個請求,這些請求不是按照順序執行,而是可以非同步併發...
通俗易懂的程序與執行緒解釋
程序 process 和執行緒 thread 是作業系統的基本概念,但是它們比較抽象,不容易掌握。最近,我讀到一篇材料,發現有乙個很好的模擬,可以把它們解釋地清晰易懂。1.計算機的核心是cpu,它承擔了所有的計算任務。它就像一座工廠,時刻在執行。2.假定工廠的電力有限,一次只能供給乙個車間使用。也就...