PHP系統程式設計--01.多程式與多執行緒
PHP中提供了一個擴充套件pcntl,可以利用作業系統的fork呼叫來實現多程式。fork呼叫後執行的程式碼將是並行的。
PHP官方沒有提供多執行緒的擴充套件,pecl中有一個pthreads擴充套件提供了多執行緒的特性,地址是http://pecl.php.net/package/pthreads,此擴充套件僅線上程安全版本中可用。
多程式
- 使用多程式, 子程式結束以後, 核心會負責回收資源
- 使用多程式, 子程式異常退出不會導致整個程式Thread退出. 父程式還有機會重建流程.
- 一個常駐主程式, 只負責任務分發, 邏輯更清楚.
- 多程式方式更加穩定,另外利用程式間通訊(IPC)也可以實現資料共享。
- 共享記憶體,這種方式和執行緒間讀寫變數是一樣的,需要加鎖,會有同步、死鎖問題。
- 訊息佇列,可以採用多個子程式搶佇列模式,效能很好
多執行緒
- 執行緒是在同一個程式內的,可以共享記憶體變數實現執行緒間通訊
- 執行緒比程式更輕量級,開很大量程式會比執行緒消耗更多系統資源
-
多執行緒也存在一些問題:
- 執行緒讀寫變數存在同步問題,需要加鎖
- 鎖的粒度過大存在效能問題,可能會導致只有1個執行緒在執行,其他執行緒都在等待鎖
- 同時使用多個鎖,邏輯複雜,一旦某個鎖沒被正確釋放,可能會發生執行緒死鎖
- 某個執行緒發生致命錯誤會導致整個程式崩潰
php搭建pcntl
在PHP中程式控制支援預設是關閉的。您需要使用 –enable-pcntl 配置選項重新編譯PHP來開啟程式控制支援。注:pcntl只支援Linux版本
##本例用的php版本的是5.3.3,
cd php-5.3.3/ext/pcntl
phpize
./configure --with-php-config=/usr/local/bin/php-config
make
make isntall
在php.ini下加入pcntl.so
即可
extension=pcntl.so
程式碼演示
現在我們通過 pcntl擴充套件來呼叫作業系統的fork實現多程式。fork呼叫後執行的程式碼將是並行的。
<?php
$pid = pcntl_fork();
if($pid > 0){
echo "parent\n";
}elseif($pid == 0){
echo "child\n";
}else{
echo "error\n";
}
參考地址:
http://php.net/manual/zh/book.pcntl.php
http://www.laruence.com/2009/06/11/930.html
來源:http://www.cnblogs.com/linzhenjie/p/5485419.html
相關文章
- PHP 的多程式與執行緒PHP執行緒
- GCD 與多執行緒程式設計GC執行緒程式設計
- 程式設計思想之多執行緒與多程式(3):Java 中的多執行緒程式設計執行緒Java
- 多執行緒程式設計執行緒程式設計
- 程式設計思想之多執行緒與多程式(1):以作業系統的角度述說執行緒與程式程式設計執行緒作業系統
- 程式設計思想之多執行緒與多程式(4):C++ 中的多執行緒程式設計執行緒C++
- .NET多執行緒程式設計(1):多工和多執行緒 (轉)執行緒程式設計
- JavaScript多執行緒程式設計JavaScript執行緒程式設計
- Boost多執行緒程式設計執行緒程式設計
- UNIX多執行緒程式設計執行緒程式設計
- 多執行緒程式設計(轉)執行緒程式設計
- python 多執行緒程式設計Python執行緒程式設計
- Python多執行緒程式設計Python執行緒程式設計
- IOS多執行緒程式設計:概述iOS執行緒程式設計
- C#多執行緒程式設計C#執行緒程式設計
- linux 多執行緒程式設計Linux執行緒程式設計
- 多執行緒程式設計ExecutorService用法執行緒程式設計
- 29. 多執行緒程式設計執行緒程式設計
- 【Python】 多程式與多執行緒Python執行緒
- 程式設計思想之多執行緒與多程式(2):執行緒優先順序與執行緒安全程式設計執行緒
- 多執行緒,多程式執行緒
- 使用執行緒池優化多執行緒程式設計執行緒優化程式設計
- iOS多執行緒程式設計:執行緒同步總結iOS執行緒程式設計
- .NET多執行緒程式設計(3):執行緒同步 (轉)執行緒程式設計
- [短文速讀 -5] 多執行緒程式設計引子:程式、執行緒、執行緒安全執行緒程式設計
- 多執行緒程式設計總結:一、認識多執行緒本質執行緒程式設計
- 多程式多執行緒程式設計彙總(持續更新中)執行緒程式設計
- [02] 多執行緒邏輯程式設計執行緒程式設計
- Java多執行緒程式設計基礎Java執行緒程式設計
- Python多執行緒程式設計(二)Python執行緒程式設計
- iOS多執行緒程式設計入門iOS執行緒程式設計
- Swift多執行緒程式設計總結Swift執行緒程式設計
- Java多執行緒程式設計要點Java執行緒程式設計
- 深入理解多執行緒程式設計執行緒程式設計
- iOS開發-多執行緒程式設計iOS執行緒程式設計
- 多執行緒程式設計,處理多執行緒的併發問題(執行緒池)執行緒程式設計
- .NET多執行緒程式設計(4):執行緒池和非同步程式設計 (轉)執行緒程式設計非同步
- Java多執行緒1:程式與執行緒概述Java執行緒