PHP-FPM 子进程Synchronous/Asynchronous?
PHP-FPM Child Process Synchronous/Asynchronous?
我编写了一些库,在同一个 PHP-FPM 进程中的多个请求之间保留一些数据 (indexed by processID)
。目前我将 max_requests
设置为 10000
。因此,数据在这 10000 个请求之间共享,直到进程终止。
当此数据不可用时(最初),当前正在处理的一个请求会创建此数据,后续请求会使用它。
问题
我看到同一进程的此数据是为同一进程多次创建的。那么,多个请求是否由同一个进程同时处理?还是像队列一样处理请求?
I have coded some library that persists some data (indexed by processID)
我真的很难想象这是什么问题的正确解决方案。这听起来像是 XY 问题。
are multiple requests handled by same process concurrently
否 - PHP-FPM 进程一次只能处理一个请求。通常一个进程一次只能处理一个任务——一个例外是轻量级进程(线程),其中 OS 进程实体有多个可调度的执行。事件驱动程序(例如 javascript、nginx)可以创造一次处理多个执行线程的错觉,但实际上情况并非如此——它们只能在不同的操作之间切换。
are the requests handled like a queue?
是的,侦听套接字是队列的头部,多个工作进程将从队列中分配项目(一次一个)。
我编写了一些库,在同一个 PHP-FPM 进程中的多个请求之间保留一些数据 (indexed by processID)
。目前我将 max_requests
设置为 10000
。因此,数据在这 10000 个请求之间共享,直到进程终止。
当此数据不可用时(最初),当前正在处理的一个请求会创建此数据,后续请求会使用它。
问题
我看到同一进程的此数据是为同一进程多次创建的。那么,多个请求是否由同一个进程同时处理?还是像队列一样处理请求?
I have coded some library that persists some data (indexed by processID)
我真的很难想象这是什么问题的正确解决方案。这听起来像是 XY 问题。
are multiple requests handled by same process concurrently
否 - PHP-FPM 进程一次只能处理一个请求。通常一个进程一次只能处理一个任务——一个例外是轻量级进程(线程),其中 OS 进程实体有多个可调度的执行。事件驱动程序(例如 javascript、nginx)可以创造一次处理多个执行线程的错觉,但实际上情况并非如此——它们只能在不同的操作之间切换。
are the requests handled like a queue?
是的,侦听套接字是队列的头部,多个工作进程将从队列中分配项目(一次一个)。