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