我目前正在使用winsock2编程服务器,其中max。工作负载将是大约1000个并发连接。为了接受套接字我正在使用一个在阻塞模式下运行accept()的独立线程。但是为了接收我想到的数据(也有一个单独的线程),但这次使用非阻塞模式和这样的伪代码:
for (;;)
{
foreach socket
{
int num = socket.recv(..);
if (num == SOCKET_ERROR && WSAGetLastError() == EAGAIN/EWOULDBLOCK)
continue;
else
// push buffer to worker thread / handle error
}
thread.sleep(1);
}
这会不会给cpu带来困难吗? 我在互联网上发现的两个主要原因是:cpu load 2.许多内核调用。睡眠解决了第一个问题(我希望),但我不知道接收在非阻塞套接字模式下的调用性能,也不知道为什么许多调用使得这个问题变得很糟糕。
答案 0 :(得分:0)
不,如果不给CPU带来困难,它将无法工作。当你可以完全阻塞正确的时间时,睡眠实际上是浪费时间。
不要这样做。我无法想象为什么你会在第一时间想到它。