2024 年 PHP Conference Japan

parallel\Runtime::run

(0.8.0)

parallel\Runtime::run執行

描述

public parallel\Runtime::run(Closure $task): ?Future

將排程 task 以平行方式執行。

public parallel\Runtime::run(Closure $task, array $argv): ?Future

將排程 task 以平行方式執行,並在執行時傳遞 argv

參數

task

具有特定特性的 Closure

argv

一個具有特定特性的 array 參數,將在執行時傳遞給 task

任務特性

排程用於平行執行的閉包不得:

  • 使用傳址方式傳入或傳回參數
  • 傳入或傳回內部物件(參見註釋)
  • 執行一組受限的指令

在用於平行執行的閉包中禁止的指令為:

  • yield
  • 使用傳址
  • 宣告類別
  • 宣告具名函式

註釋:

巢狀閉包可以使用 yield 或傳址,但不允許包含類別或具名函式的宣告。

註釋:

任務可能包含的檔案中沒有任何指令是被禁止的。

參數特性

參數不得:

  • 包含參考
  • 包含資源
  • 包含內部物件(參見註釋)

註釋:

對於檔案串流資源,資源將會被轉換為檔案描述符,並在可能的情況下以 int 型態傳遞,Windows 不支援此功能。

內部物件註釋

內部物件通常使用自定義結構,無法安全地以值複製,PHP 目前缺乏執行此操作的機制(不透過序列化),因此只有不使用自定義結構的物件才能被共享。

某些內部物件不使用自定義結構,例如 parallel\Events\Event,因此可以共享。

閉包是一種特殊的內部物件,支援以值複製,因此可以共享。

通道是撰寫平行程式碼的核心,並且必然支援並行存取和執行,因此可以共享。

警告

繼承內部類別的使用者類別可能會使用內部類別定義的自定義結構,在這種情況下,它們無法安全地以值複製,因此不能共享。

回傳值

警告

當任務包含 return 或 throw 陳述式時,不得忽略回傳的 parallel\Future

例外

警告

如果 parallel\Runtime 已關閉,將會丟出 parallel\Runtime\Error\Closed 例外。

警告

如果 task 是從內部函式建立的閉包,將會丟出 parallel\Runtime\Error\IllegalFunction 例外。

警告

如果 task 包含非法指令,將會丟出 parallel\Runtime\Error\IllegalInstruction 例外。

警告

如果 task 接受或 argv 包含非法變數,將會丟出 parallel\Runtime\Error\IllegalParameter 例外。

警告

如果 task 非法回傳,將會丟出 parallel\Runtime\Error\IllegalReturn 例外。

新增註記

使用者貢獻的註記

此頁面沒有使用者貢獻的註記。
To Top