PHP 預設為單執行緒執行模型,面對 CPU 密集型任務(如圖片處理、大量資料運算)或高併發 I/O 任務(如爬蟲、API 批次請求)時效能受限。pthreads 是 PHP 官方維護的多執行緒擴充套件,能在 CLI 模式下建立真正的平行執行緒,大幅提升多核心 CPU 利用率。注意:pthreads 僅支援 CLI SAPI,不支援 Apache/Nginx 等 Web SAPI 環境。
<?php phpinfo(); ?>
在輸出中尋找 Thread Safety 欄位:
-ts- 的 pthreads 檔案。-nts- 的檔案。同時記下:
前往 PECL 官方下載頁:https://pecl.php.net/package/pthreads
php_pthreads---ts/nts-vc<編譯器>-x86/x64.zip 。範例: PHP 8.1 TS VC16 x64 → php_pthreads-4.0.0-8.1-ts-vs16-x64.zip
php_pthreads.dll → 複製到 PHP 安裝目錄下的 ext/ 資料夾。pthreadVC2.dll (或 pthreadVC3.dll) → 複製到 PHP 執行檔同層目錄(即 php.exe 所在資料夾),同時也建議複製一份到系統路徑(如 C:\Windows\System32 或 Apache 的 bin/ 目錄),避免 CLI 與 Web 環境找不到 DLL。php.ini,在 Dynamic Extensions 區塊新增:extension=pthreadsphp -m | findstr pthreads
或執行測試腳本:
<?php
// test_threads.php
class AsyncOperation extends Thread {
public $arg;
public function __construct($arg) { $this->arg = $arg; }
public function run() {
if ($this->arg) {
printf("Hello %s\n", $this->arg);
}
}
}
$thread = new AsyncOperation("World");
$thread->start();
$thread->join();
echo "執行緒測試完成\n";
?>
執行 php test_threads.php,若輸出 Hello World 且無錯誤,即代表安裝成功!
| 錯誤現象 | 可能原因 | 解決方案 |
|---|---|---|
PHP Startup: Unable to load dynamic library 'pthreads' |
DLL 架構/TS-NTS/VC 版本不匹配 | 重新核對 phpinfo() 資訊,下載完全一致的套件 |
Fatal error: Class 'Thread' not found |
extension=pthreads 未生效或 php.ini 編輯錯誤 | 執行 php --ini 確認載入的 ini 檔,並在正確檔案中啟用 |
| 執行緒啟動後立即結束、無輸出 | 忘記呼叫 $thread->join() 導致主程式提前結束 |
務必在 start() 後呼叫 join() 等待執行緒結束 |
| Apache/Nginx 啟動報錯 | pthreads 不支援 Web SAPI | 僅在 CLI 模式使用;Web 環境請改用 pcntl_fork、symfony/process 或訊息佇列 |
Pool 類別管理固定數量的 Worker 執行緒,避免無限建立執行緒導致資源耗盡。Threaded 物件(如 Volatile、Stackable)在執行緒間安全傳遞資料。Mutex、Cond 實現執行緒同步與訊號通知。在 Windows 上部署 pthreads 的關鍵在於「版本對齊」:PHP 版本、TS/NTS、VC 編譯器、位元數四項必須完全一致。安裝完成後,即可在 CLI 腳本中發揮多核心效能,處理大規模平行運算任務。記住:Web 環境請勿嘗試載入 pthreads,否則會導致伺服器不穩定。