$httpworker = new Worker('text://127.0.0.1:8888');
$httpworker->name = 'HttpWorker';
$httpworker->count = 10;
假設(shè)有20個(gè)處理任務(wù)同時(shí)發(fā)送到httpworker,收到任務(wù)以后,會(huì)優(yōu)先發(fā)送給當(dāng)前空閑的進(jìn)程處理這個(gè)任務(wù),所以初始可以打開(kāi)10個(gè)進(jìn)程處理任務(wù),等這10個(gè)進(jìn)程處理完了,在處理剩下的10個(gè)任務(wù)。
實(shí)際情況是httpworker收到任務(wù)之后只有隨機(jī)的三到四個(gè)進(jìn)程在處理任務(wù),其他任務(wù)都在這三個(gè)進(jìn)程后面排隊(duì),這就造成了明明有10個(gè)進(jìn)程都可以處理任務(wù),但是實(shí)際卻只有少量的進(jìn)程在處理多個(gè)任務(wù)。
經(jīng)過(guò)測(cè)試,只有“同時(shí)”發(fā)送的任務(wù)會(huì)這樣,如果延時(shí)發(fā)送20個(gè)任務(wù),那么worker能夠正確的把10個(gè)進(jìn)程都利用起來(lái)。
同時(shí)有很多客人進(jìn)來(lái),等待空閑的服務(wù)生有10個(gè),本來(lái)應(yīng)該一個(gè)服務(wù)生接待一個(gè)客戶,然后告訴客戶,我已經(jīng)有客戶了,其他客戶去找另外9個(gè)空閑的服務(wù)生。這樣等10個(gè)服務(wù)生都有客戶之后,其他的客戶在排隊(duì)等待空閑的服務(wù)生。
但是現(xiàn)在是一個(gè)空閑的服務(wù)生,面對(duì)同時(shí)進(jìn)來(lái)的大量客戶,他會(huì)一次接待好幾個(gè),造成有的服務(wù)生忙不過(guò)來(lái),后面還有還幾個(gè)客戶在排隊(duì),而有的服務(wù)生就什么都沒(méi)干!