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