国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

count 進程多了,速度反倒變慢了?

zzccomet

用的是workerman。而且是centos7系統(tǒng)。而且也按照說明優(yōu)化了服務(wù)器啊。在onmessage之后send。
(另外順便問個問題,在PHP端,客戶端的PHP端,接收數(shù)據(jù),只能是先socket_write之后才能socket_read嗎?無法接收workerman的onConnect就返回的send數(shù)據(jù)嗎?也就是必須要php客戶端向服務(wù)器workerman發(fā)數(shù)據(jù)后,收到onmessage的回復(fù)?而無法在php客戶端收到onconnect的回復(fù)?大家有什么辦法嗎?)$worker->count = 31;
?
我的服務(wù)器有32核心。我設(shè)置為count=31后,速度為5秒執(zhí)行完畢。而我設(shè)置為count=1之后,是2秒。然后設(shè)置count=2或4,是1.8秒。超過cont=5以上,就越來越慢。比如說10,15,20等等。特別是對CPU的壓力也隨之而來。甚至CPU飆升到30%了。而count=2左右的數(shù)字,就沒事,CPU也僅僅不到10%就執(zhí)行完畢,2秒或不到2秒
?
也就是說,核心多,設(shè)置count越高,速度反倒越慢 了。
?
是我測試有問題嗎?
?模擬5萬次連接:

$stime=microtime(true);?
for($i=0;$i<50000;$i++){
? $socket = socket_create(AF_INET,SOCK_DGRAM,SOL_UDP);
? socket_connect($socket,'127.0.0.1',8282);
? socket_write($socket,1,1);
? $callback = socket_read($socket,50,PHP_BINARY_READ);
? echo $callback;
? socket_close ($socket);?
?}
$etime=microtime(true);//獲取程序執(zhí)行結(jié)束的時間
$total=$etime-$stime;? //計算差值
echo "<br />當前頁面執(zhí)行時間為:{$total} 秒";
4305 3 0
3個回答

walkor 打賞

如果在onConnect send數(shù)據(jù)給客戶端,客戶端可以不必socket_write就可以直接socket_read。
?
進程數(shù)開多后出現(xiàn)執(zhí)行時間增長主要是以下幾個原因?qū)е拢?br /> 1、多cpu linux 系統(tǒng)下多個進程監(jiān)聽同一個端口,當有客戶端連接上來是就發(fā)生驚群效應(yīng),造成一定的cpu消耗和性能消耗
可以參考?https://wenda.workerman.net/question/179?。 workerman里可以開啟?http://doc.workerman.net/worker/reuse-port.html?來避免驚群,要求php>=7.0。
2、多個進程在進程切換的時候有一定開銷
3、多個進程近乎同時處理業(yè)務(wù)會利用多個cpu,任意時刻多個cpu消耗總和會大于單個cpu(單個進程只會利用一個cpu)
?
解決辦法是升級php>=7.0,開啟reusePort。
?
但是基于2、3點即使開啟reusePort,我猜測你這個壓測方案設(shè)置成多進程和單進程比沒有優(yōu)勢。
?
原因是你的壓測腳本是單進程的,而且同一時刻只能發(fā)起1個請求,請求響應(yīng)后才才發(fā)起下一個,并發(fā)請求數(shù)是1,這樣的話服務(wù)端只需要一個進程即可,設(shè)置成多進程反而增加進程切換等開銷,性能有所下降。就像本來一個人能干的活兒非要多個人輪流上,消耗明顯增大變慢。
?
如果是并發(fā)超過1,設(shè)置成多進程更合理。當并發(fā)數(shù)超過1的時候你會發(fā)現(xiàn)多個進程處理一般會比單個進程處理快。
?
?

  • zzccomet 2019-07-16

    reuseport確實有效果,31進程,雖然沒有達到單線程1.8秒,但是基本在2.3秒左右了,比5秒少了一半。
    我這個基本就是做了一個接口,然后全部都是短連接請求。

    另外,您說的【在onConnect send數(shù)據(jù)給客戶端,客戶端可以不必socket_write就可以直接socket_read】這個我也是這么想的,可是實際測試的時候,用PHP做客戶端請求,沒有收到任何信息。也就是不write發(fā)送onmessage就不行。要不,您試試?

six

把echo $callback; 去掉,php打印到終端比較耗時,也會影響并發(fā)

  • 暫無評論
langbin

你這個模擬不算是并發(fā)呢。這就是五萬次請求而以。每一個請求還要等待前一個完成。

  • 暫無評論
年代過于久遠,無法發(fā)表回答
??