后续操作,用于后台工作程序堆栈
作者: 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- [ ] 一旦边界具有一个形状,就将其余的常见记账纳入workerLifecycle。https://GitHub.com/php/frankenphp/pull/2617#discussion_r3987787771- [ ]num_regular_threads和max_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()所需的套接字配对。
内容来源: php/frankenphp