#2657·frankenphp

后续操作,用于后台工作程序堆栈

作者: nicolas-grekas创建于 2026年9月18日更新于 2026年9月18日
  • 在 #2617 和其堆栈之后留下的需要完成或决定的事情,以免丢失。- [ ] 在停止正在运行的应用程序之前验证配置: Start() 调用 Init() 后,旧应用程序停止,因此任何声明错误都会导致网站停止运行,而 Caddy 会回滚配置。Init()Validate() 共享的副作用无关的预检。https://GitHub.com/php/frankenphp/pull/2617#discussion_r3987787721- [ ] 同步启动失败的边界: 发布 ShuttingDown 在线程完成其退出路径之前唤醒启动等待者,并且不区分关闭请求与退出的线程。两个工作处理器都共享该路径。https://GitHub.com/php/frankenphp/pull/2617#discussion_r3987787784- [ ] 一旦边界具有一个形状,就将其余的常见记账纳入 workerLifecyclehttps://GitHub.com/php/frankenphp/pull/2617#discussion_r3987787771- [ ] num_regular_threadsmax_regular_threads, 这样就没有人手动计算线程预算。https://GitHub.com/php/frankenphp/pull/2617#discussion_r3866053582- [ ] 在 PHP 8.6 可以在 CI 中进行测试之后,在 FrankenPHP\WorkerPollHandle 上实现 Io\Poll\Handle, 这样处理器可以直接在 Io\Poll\Context 上注册,而不需要通过 StreamPollHandle。接口是一个空标记,合同是 php_poll_handle_ops 钩子。https://GitHub.com/php/frankenphp/pull/2617#issuecomment-5731032156- [ ] 从 #2636 的通用路径中删除每个任务的 php_stream, 现在处理器的生命周期正好是任务的生命周期: 将任务状态保存在对象中,在 free_obj 中解决问题,并在 getStream() 中动态构建流,这样脚本如果不进行多路复用,则不会为每个任务分配流和资源。然后通过每个线程的自由列表回收处理器本身。在 Linux 上,通道保持为事件套接字;在 macOS 上,寻找等效的描述符,使用 EVFILT_USER 触发的 kqueue 描述符是可轮询的,不需要配对,管道是常规的回退(libuv 的异步处理器),而 Windows 则保留 php_select() 所需的套接字配对。