PHP 大会日本 2024

简介

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,它提供了一个单一的函数入口点,用于使用自动调度执行并行代码: parallel\run()

任务

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

  • yield

  • 按引用使用

  • 声明类

  • 声明命名函数

注意:

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

注意:

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

Future

使用 parallel\Future 访问任务的返回值,并公开用于取消任务的 API。

通道

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

事件

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

另请参阅

添加注释

用户贡献的注释

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