$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个进程都利用起来。
操作系统是?
mac os x
同时有很多客人进来,等待空闲的服务生有10个,本来应该一个服务生接待一个客户,然后告诉客户,我已经有客户了,其他客户去找另外9个空闲的服务生。这样等10个服务生都有客户之后,其他的客户在排队等待空闲的服务生。
但是现在是一个空闲的服务生,面对同时进来的大量客户,他会一次接待好几个,造成有的服务生忙不过来,后面还有还几个客户在排队,而有的服务生就什么都没干!
mac 系统下php不支持reusePort,换成其它linux系统就好了。
谢谢你,我在linux下测试情况好点,有时候进程能够全部利用,但是有时候也是只有8个到9个进程在工作,2个进程空闲。这个是系统问题吗,需要怎么优化?
发到哪个进程是操作系统调度的。不会100%完全平均,请求量大了趋于平均。