PHP實現非阻塞以及多線程編程

來源:互聯網
上載者:User
PHP多線程編程的實現以及非阻塞的實現。php預設並不支援多線程,要使用多線程需要安裝 pthread 擴充,在安裝好後,就可以進行多線程編程。

線程概念

線程是作業系統能夠進行調度的最小單位

一個多線程程式比單線程程式被作業系統調度的機率更大,所以多線程程式一般會比單線程程式更高效;

多線程程式的多個線程可以在多核 CPU 的多個核心同時運行,可以將完全發揮機器多核的優勢;

線程的建立和切換的系統開銷都比進程要小,所以一定程度上會比多進程更高效;

線程天生的共用記憶體空間,線程間的通訊更簡單,避免了進程IPC引入新的複雜度。

什麼時候該使用線程

I/O 阻塞會使作業系統發生任務調度,阻塞當前任務,所以代碼中 I/O 多的情況下,使用多線程時可以將代碼並行

多線程能充分利用 CPU,所以有多處大計算量代碼時,也可以使用多線程使他們並存執行

用線程的好與壞

PHP 實現的安全執行緒主要是使用 TSRM 機制對 全域變數和靜態變數進行了隔離,將全域變數和靜態變數 給每個線程都複製了一份,各線程使用的都是主線程的一個備份,從而避免了變數衝突,也就不會出現安全執行緒問題。

子線程一旦開始運行,主線程便無法再對子線程運行細節進行調整

擴充安裝

PHP 預設並不支援多線程,要使用多線程需要安裝 pthread 擴充,而要安裝 pthread 擴充,必須使用 --enable-maintainer-zts 參數重新編譯 PHP,這個參數是指定編譯 PHP 時使用安全執行緒方式。

./configure --enable-maintainer-zts --with-tsrm-pthreads

執行個體

class Request extends Thread {    public $url;    public $response;    public function __construct($url) {        $this->url = $url;    }    public function run() {        $this->response = file_get_contents($this->url);    }}$chG = new Request("www.google.com");$chB = new Request("www.baidu.com");$chG ->start();$chB ->start();$chG->join();$chB->join();$gl = $chG->response;$bd = $chB->response;

PHP非阻塞

使用 fastcgi_finish_request()

echo "program start...";fastcgi_finish_request();sleep(1);echo 'debug1...';sleep(10);echo 'debug2...';

使用 fsockopen()
stream_set_blocking()

使用 cURL
$cmh = curl_multi_init();

使用 Gearman/Swoole 擴充

使用緩衝和隊列
redis

調用系統命令
$cmd = 'nohup php ./processd.php $someVar >/dev/null &';

使用 pcntl_fork()

PHP 原生支援
yield

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.