简介

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 调度,任务将按照它们被调度的顺序执行。

函数式 API

parallel 在 parallel\Runtime 的基础上实现了一个函数式、更高层次的 API,该 API 提供了一个单一的函数入口点来执行并行代码,并自动调度:parallel\run().

任务

任务只是一个用于并行执行的 Closure。该 Closure 可以包含几乎任何指令,包括嵌套的闭包。但是,有一些指令在任务中是被禁止的

  • yield

  • 使用按引用传递

  • declare class

  • declare named function

注意:

嵌套的闭包可以 yield 或按引用传递,但不能包含类或命名函数声明。

注意:

在任务可能包含的文件中,没有任何指令是被禁止的。

Future

使用 parallel\Future 可以访问任务的返回值,并提供了一个用于取消任务的 API。

通道

一个任务可以被调度带有参数,使用词法作用域变量(按值传递),并返回一个值(通过 parallel\Future),但这些只允许单向通信:它们允许程序员将数据发送到任务中并从任务中检索数据,但不能允许任务之间进行双向通信。parallel\Channel API 允许任务之间进行双向通信,一个 parallel\Channel 是任务之间的一个类似套接字的连接,程序员可以使用它来发送和接收数据。

事件

The parallel\Events API 实现了一个原生风格 (Traversable) 事件循环,和 parallel\Events::poll() 方法。它允许程序员使用通道和 futures 的集合。程序员只需将通道和 futures 添加到事件循环中,可以选择使用 parallel\Events::setInput() 设置写入的输入,并进入 foreach:parallel 将在对象可用时从它们读取和写入,生成描述已发生操作的 parallel\Events\Event 对象。

另见

添加注释

用户贡献注释

此页面没有用户贡献的注释。
To Top