workman的进程概念问题

joytom

对workman的进程概念有些模糊,举个例子:

例如我,$worker->count=1,只指定一个进程,那这一个进程可以同时接受并处理多个请求吗,还是说这一个进程必须处理完一个请求后,其它请求才可以进入?

1404 2 5
2个回答

evilk

这一个进程,同时只能处理1个请求,这个请求处理完了,才能接着处理下一个请求

  • jie365@126.com 2022-03-14

    对的,进程内部是顺序执行的。一个进程处理一个请求?

  • liziyu 2022-03-14

    传统的fpm模式就是这种吧?

  • jie365@126.com 2022-03-14

    是的,php-fpm也是多个进程来处理请求

walkor

进程处理请求的方式看业务代码使用的是哪些库。

如果业务调用的是pdo mysql 、redis扩展等这些阻塞接口,那么单个进程处理完一个请求后才能处理下一个请求。这种情况下提高并发量需要多开一些进程,例如cpu的2-4倍,利用多进程来提高吞吐量。

如果业务调用的都是是异步非阻塞接口,比如 workerman/redis workerman/http-client等。或者是调用的swole/fiber协程(例如设置 Worker::$eventLoopClass = Workerman\Events\Swoole:class; Co::set(['hook_flags'=> SWOOLE_HOOK_ALL]);)那么单个进程内可以看作是并发处理。

  • joytom 2022-03-16

    如果是异步非阻塞,单个进程可以并发处理,但是从微观角度讲一个cpu只能处理一个进程,那一个进程也只能同时处理一个请求,只不过执行速度很快,我们感知不到,让我们觉着是并发处理的。是这样吗老大?

  • walkor 2022-03-16

年代过于久远,无法发表回答
🔝