我在webman的server.php中設(shè)置了count=10,10個(gè)進(jìn)程。
然后index控制器中寫入了sleep(1),其他沒(méi)有改動(dòng)。
內(nèi)網(wǎng)中使用php的curl_multi發(fā)起了20個(gè)并發(fā)請(qǐng)求到webman中,在我的理想中應(yīng)該是2秒結(jié)束curl的運(yùn)行(10個(gè)進(jìn)程處理20個(gè)請(qǐng)求,分兩批唄,各占用1秒),但實(shí)際上用了4秒 甚至更多。
然后我將curl_multi改為了10個(gè)并發(fā)請(qǐng)求,理想中應(yīng)該是1秒完成,但測(cè)試結(jié)果發(fā)現(xiàn)還是2秒或更多
繼續(xù)修改,將curl_multi改為5個(gè)并發(fā)請(qǐng)求,心想著count=10,我這5個(gè)請(qǐng)求怎么著也是一起完成吧?測(cè)試后發(fā)現(xiàn)還是1~2秒中跳動(dòng),即便我將count=100或更多都是一樣的結(jié)果。
然后在sleep(1)前加了一個(gè)echo time(); 在控制臺(tái)發(fā)現(xiàn)感覺(jué)不管我curl_multi訪問(wèn)多少個(gè)請(qǐng)求,都是對(duì)半處理,永遠(yuǎn)無(wú)法同時(shí),10個(gè)并發(fā) webman就同時(shí)處理5個(gè),100個(gè)并發(fā)那就同時(shí)處理50個(gè)。
嘗試了安裝了event,將配置文件reusePort=true都無(wú)果。
想問(wèn)下,這是什么原因,謝謝各位大佬。
使用linux系統(tǒng),并開(kāi)啟reusePort 。
提示 macOS 不支持reusePort,反正我macOS測(cè)試reusePort沒(méi)效果。
調(diào)度問(wèn)題吧
重啟,發(fā)完請(qǐng)求執(zhí)行 php webman status
看每個(gè)進(jìn)程處理的情況
嗯,是調(diào)度問(wèn)題。status看了,空閑的比較閑,大部分請(qǐng)求都集中在幾個(gè)進(jìn)程內(nèi),看了文檔和其他幾個(gè)同類的問(wèn)答帖,具體原因應(yīng)該是webman不會(huì)平均分配進(jìn)程,切換進(jìn)程也有性能消耗,所以就集中在幾個(gè)進(jìn)程內(nèi)處理了。我按照作者大大說(shuō)的reusePort 設(shè)置為ture來(lái)平均分配,但看status結(jié)果來(lái)說(shuō),和沒(méi)開(kāi)啟時(shí)的結(jié)果大差不差,大量并發(fā)時(shí)還是比較集中在某幾個(gè)進(jìn)程內(nèi)。