parallel 是一個適用於 PHP ≥ 7.2.0 的平行並行擴充套件。從 parallel 1.2.0 開始,需要 PHP ≥ 8.0.0。
以下是 parallel 核心概念的簡要說明,更詳細的資訊可以在本節手冊中找到。
一個 parallel\Runtime 代表一個 PHP 直譯器執行緒。 parallel\Runtime 使用傳遞給 parallel\Runtime::__construct() 的選用啟動檔案進行設定,這通常是一個自動載入器或其他一些預載程式:啟動檔案將在執行任何任務之前被包含。
建構完成後,parallel\Runtime 物件會持續有效,直到它被關閉、終止,或依循 PHP 物件的一般作用域規則而銷毀。 parallel\Runtime::run() 允許程式設計師排程任務以平行執行。 parallel\Runtime 具有 FIFO(先進先出)排程,任務將按照排程的順序執行。
parallel 在 parallel\Runtime 之上實作了一個函數式、更高階的 API,它提供單一函數入口點來執行具有自動排程的平行程式碼:parallel\run()。
任務只是一個用於平行執行的 Closure(閉包)。 Closure 可以包含幾乎任何指令,包括巢狀閉包。然而,有些指令在任務中是被禁止的:
yield
使用 by-reference(傳址)
宣告 class(類別)
宣告具名 function(函式)
注意事項:
巢狀閉包可以使用 yield 或 by-reference,但不允許包含類別或具名函式的宣告。
注意事項:
任務可能 include(包含)的檔案中沒有任何指令是被禁止的。
parallel\Future 用於存取任務的回傳值,並公開了一個用於取消任務的 API。
可以透過參數排程任務,使用詞法作用域變數(以值傳遞),並回傳值(透過 parallel\Future),但這些機制都只允許單向通訊:它們允許程式設計師將資料傳入任務並從任務中擷取資料,但不允許任務之間的雙向通訊。 parallel\Channel API 允許任務之間的雙向通訊,parallel\Channel 就像任務之間的 socket 連線,程式設計師可以用它來傳送和接收資料。
parallel\Events API 實作了原生風格(Traversable)的事件迴圈和 parallel\Events::poll() 方法。它允許程式設計師處理通道和/或 Future 的集合。程式設計師只需將通道和 Future 新增到事件迴圈中,並可選擇使用 parallel\Events::setInput() 設定寫入的輸入,然後進入 foreach 迴圈:parallel 將在物件可用時從物件讀取和寫入物件,並產生 parallel\Events\Event 物件,描述已發生的操作。