并发的时候,worker不能正确的判断当前哪个进程处于空闲状态?

zoofei
$httpworker = new Worker('text://127.0.0.1:8888');
$httpworker->name = 'HttpWorker';
$httpworker->count = 10;

假设有20个处理任务同时发送到httpworker,收到任务以后,会优先发送给当前空闲的进程处理这个任务,所以初始可以打开10个进程处理任务,等这10个进程处理完了,在处理剩下的10个任务。
实际情况是httpworker收到任务之后只有随机的三到四个进程在处理任务,其他任务都在这三个进程后面排队,这就造成了明明有10个进程都可以处理任务,但是实际却只有少量的进程在处理多个任务。
经过测试,只有“同时”发送的任务会这样,如果延时发送20个任务,那么worker能够正确的把10个进程都利用起来。

2014 4 0
4个回答

walkor

操作系统是?

zoofei

同时有很多客人进来,等待空闲的服务生有10个,本来应该一个服务生接待一个客户,然后告诉客户,我已经有客户了,其他客户去找另外9个空闲的服务生。这样等10个服务生都有客户之后,其他的客户在排队等待空闲的服务生。
但是现在是一个空闲的服务生,面对同时进来的大量客户,他会一次接待好几个,造成有的服务生忙不过来,后面还有还几个客户在排队,而有的服务生就什么都没干!

  • 暂无评论
walkor

mac 系统下php不支持reusePort,换成其它linux系统就好了。

  • 暂无评论
zoofei

谢谢你,我在linux下测试情况好点,有时候进程能够全部利用,但是有时候也是只有8个到9个进程在工作,2个进程空闲。这个是系统问题吗,需要怎么优化?

  • walkor 2019-10-30

    发到哪个进程是操作系统调度的。不会100%完全平均,请求量大了趋于平均。

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