Closed xuanyanwow closed 1 month ago
异步 Server 在执行完 onMessage 回调之后协程就会退出,而 Coroutine Server 不同,同一个客户端连接总会有一个协程,因此 250 个客户端就会有 250 协程,需要占用内存。
异步 Server 在执行完 onMessage 回调之后协程就会退出,而 Coroutine Server 不同,同一个客户端连接总会有一个协程,因此 250 个客户端就会有 250 协程,需要占用内存。
250个协程不至于造成3倍的资源消耗吧
3倍只是巧合
并不是纠结于这个“3”,而是对于其中的消耗点想要更详细的了解
run(function () {
$i = 250;
while ($i--) {
Coroutine::create(function () {
while (true) {
sleep(1);
}
});
}
// 内存使用
$memory = memory_get_usage();
$memory = $memory / 1024;
$memory = $memory / 1024;
$memory = round($memory, 2);
echo '当前内存使用:' . $memory . 'MB' . PHP_EOL;
$channel = new Channel(1);
$channel->pop();
});
当前内存使用:3.84MB
而上面的实验结果差异为:54-18=36MB,不止协程占用的内存消耗
使用文档最小demo代码启动websocket server,模拟250个客户端以连接到两种类型的WebSocket服务器。
得到结果协程风格的内存使用量约为3倍。
是底层预期之中的差距还是代码配置有优化空间?是何原因导致该差异。
Coroutine Server
Asynchronous Server
Go Client
Coroutine Server
Asynchronous Server
php --ri swoole
)?uname -a
&php -v
&gcc -v
) ?