PHP 默認(rèn)并不支持多線程,要使用多線程需要安裝 pthread 擴(kuò)展,而要安裝 pthread 擴(kuò)展,必須使用 --enable-maintainer-zts 參數(shù)重新編譯 PHP,這個參數(shù)是指定編譯 PHP 時(shí)使用線程安全方式。
PHP 實(shí)現(xiàn)
PHP 實(shí)現(xiàn)的線程安全主要是使用 TSRM 機(jī)制對 全局變量和靜態(tài)變量進(jìn)行了隔離,將全局變量和靜態(tài)變量 給每個線程都復(fù)制了一份,各線程使用的都是主線程的一個備份,從而避免了變量沖突,也就不會出現(xiàn)線程安全問題。
PHP 對多線程的封裝保證了線程安全,程序員不用考慮對全局變量加各種鎖來避免讀寫沖突了,同時(shí)也減少了出錯的機(jī)會,寫出的代碼更加安全。
同時(shí) PHP 開啟線程安全選項(xiàng)后,使用 TSRM 機(jī)制分配和使用變量時(shí)也會有額外的損耗,所以在不需要多線程的 PHP 環(huán)境中,使用 PHP 的 ZTS (非線程安全) 版本就好。
類和方法
PHP 將線程 封裝成了 Thread 類,線程的創(chuàng)建通過實(shí)例化一個線程對象來實(shí)現(xiàn),由于類的封裝性,變量的使用只能通過構(gòu)造函數(shù)傳入,而線程運(yùn)算結(jié)果也需要通過類變量傳出。
實(shí)例代碼:
下面是一個線程類,用來請求某一接口。接下來根據(jù)它寫兩個多線程的應(yīng)用實(shí)例:
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); } }
推薦教程:PHP視頻教程
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com