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

0
$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个进程都利用起来。


已邀请:

walkor

赞同来自:

操作系统是?

zoofei

赞同来自:

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

walkor

赞同来自:

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

zoofei

赞同来自:

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

要回复问题请先登录注册