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