在 PHP 中實現多執行緒
 
多執行緒是程式執行的一種形式,其中單個程序建立多個執行緒,並且它們同時執行。本教程將討論 PHP 中的多執行緒並演示如何實現它。
在 PHP 中使用 Parallel 並行併發擴充套件實現多執行緒
    
使用 Parallel 並行併發擴充套件,我們可以在 PHP 中實現多執行緒。
該擴充套件提供了一個解釋執行緒 parallel\Runtime。我們可以從 parallel\Runtime() 類建立一個物件,從而建立一個執行緒。
該類提供了一個方法 run(),它安排任務並行執行。我們可以將 Closure 作為引數傳遞給 run 方法。
該引數一般稱為 task,我們也可以指定一個陣列作為方法的第二個引數。陣列的內容被傳遞給任務。
在下載 Parallel 並行併發擴充套件之前有一些要求。PHP 版本應該是 8.0,並且應該啟用 Zend Thread Safe (ZTS)。
<pthread.h> 標頭是另一個要求。我們可以從 pecl 下載擴充套件程式,如下所示。
pecl install parallel
我們可以使用 for 迴圈來測試程式的並行執行。
例如,我們可以在 run() 方法內執行一個迴圈,並在該方法外執行另一個迴圈。在這種情況下,程式碼執行將是並行的。
例如,建立 parallel\Runtime 類的物件 $rt,然後使用該物件呼叫 run() 方法。在 run() 方法中,編寫一個匿名函式。
首先,編寫一個 for 迴圈以在函式內列印 + 符號 50 次。接下來,在 run() 方法之外,編寫另一個 for 迴圈來列印 - 符號 50 次。
由於 run() 方法內的迴圈在單獨的執行緒中執行,run() 方法外的迴圈將同時執行。結果,- 和 + 符號同時列印,如下面的輸出部分所示。
因此,我們可以使用並行併發擴充套件來實現 PHP 中的多執行緒。
示例程式碼:
$rt = new \parallel\Runtime();
$rt->run(function(){
 for ($i = 0; $i < 50; $i++)
 echo "+";
});
for ($i = 0; $i < 50; $i++) {
 echo "-";
}
輸出:
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
在 PHP 中使用 popen() 函式實現多執行緒
我們可以使用 popen() 函式在 PHP 中開啟並行程序。
該函式對程序進行分叉,從而實現並行處理。程序不共享資源。
這樣,我們就可以在 PHP 中實現多執行緒了。popen() 函式建立一個到分叉程序的管道。
我們可以遍歷 popen() 函式並建立多個程序來實現多執行緒。popen() 函式將 command 作為第一個引數,將 mode 作為第二個引數。
模式可以是 r 或 w。
例如,建立一個迴圈五次的 for 迴圈。在迴圈內部,建立另一個迴圈五次的 for 迴圈。
在子迴圈內,建立一個陣列 $process 來儲存 popen() 函式。將 PHP 檔案 message.php 和 r 模式設定為第一個和第二個引數。
接下來,建立另一個子迴圈並使用 pclose() 函式關閉 $process。
在這裡,五個程序在第一個子迴圈中並行執行。程序在第二個子迴圈中用 pclose() 函式終止。
這就是我們如何使用 PHP 中的 popen() 函式來實現多執行緒。
示例程式碼:
for ($i=0; $i<5; $i++) {
 
 for ($j=0; $j<5; $j++) {
 $process[$j] = popen('message.php', 'r');
 }
 for ($j=0; $j<5; ++$j) {
 pclose($process[$j]);
 }
}
