onion/event-loop

dev-master 2023-10-13 21:27 UTC

README

这是一个完全依赖于PHP 8.1 Fibers以提供原生异步功能的异步事件循环。通过

  1. 引入一个coroutine函数来在事件循环上执行
  2. 添加tick函数,允许处理控制权返回到事件循环以与其他协程协同工作
  3. 引入自定义流包装器(async://),使用信号以更好地透明地中断IO操作,适用于应用程序。
  4. 修补原生的file://流以透明地处理所有(除.php文件外,因为它会与自动加载器/文件包含产生竞态条件)。

已知问题

当与symplely/uv-ffi一起工作时,应手动调用scheduler()->start()以显式启动事件循环,而不是依赖于自动启动,因为FFI扩展在脚本完全终止之前被卸载。

函数

channel - 一个函数,用于创建缓冲或非缓冲通道,以便在两个或多个协程之间交换数据。如果向其$size参数提供任何值,则确定通道类型

coroutine - 一个函数,将提供的函数添加到事件循环中,以提供的参数执行

tick - 一个信号包装器,旨在用于复杂/重代码,以便“标记”函数可以处理返回控制权到事件循环的点,以便允许它执行其他计划的任务。(这应该用于“低级”代码,因此对最终用户是透明的)

signal - 此函数用于“信号”事件循环,中断当前正在运行的任务,直到提供的回调指示它应该恢复,并可选地传递执行的结果值

read - 等待给定流变为可读,并执行提供的函数

write - 与read相同,但用于写入

is_pending - 检查给定流在执行时是否有要读取/写入的数据

sleep - 非阻塞睡眠函数,使它执行的协程挂起,直到给定时间