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

count 進(jìn)程多了,速度反倒變慢了?

zzccomet

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

$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é)束的時(shí)間
$total=$etime-$stime;? //計(jì)算差值
echo "<br />當(dāng)前頁(yè)面執(zhí)行時(shí)間為:{$total} 秒";
4397 3 0
3個(gè)回答

walkor 打賞

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

  • zzccomet 2019-07-16

    reuseport確實(shí)有效果,31進(jìn)程,雖然沒(méi)有達(dá)到單線程1.8秒,但是基本在2.3秒左右了,比5秒少了一半。
    我這個(gè)基本就是做了一個(gè)接口,然后全部都是短連接請(qǐng)求。

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

six

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

  • 暫無(wú)評(píng)論
langbin

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

  • 暫無(wú)評(píng)論
年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??