无盖插座的紧密RECV环路
tight recv loop for non blocked socket
我当前使用winsock2对服务器进行编程。工作负载约为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遇到困难的情况下工作吗?我在Internet中发现为什么这是不良代码的两个主要原因是1。CPU负载2.许多内核调用。睡眠解决了第一个问题(我希望(,但我对在非阻止套接字模式接收的呼叫表现一无所知,也不为什么这些电话使此不良解决方案。
否,如果不给CPU遇到困难,它将无法使用。从字面上看,睡眠是浪费时间,您可能会完全阻止正确的时间。
不要这样做。我无法想象您为什么首先会想到。
相关文章:
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 普通环路未使用gcc 4.8.5自动矢量化
- Linux 服务器中的 Recv 缓冲区大小
- 在 for 循环中处理复杂的发送 recv 消息
- C++ - 标准输入环路
- C++ TCP 套接字通信 - 连接按预期工作,几秒钟后失败,没有收到新数据,read() 和 recv() 块
- 在 Linux 中关闭 UDP 套接字后,recv 不会返回
- 为什么套接字中的 recv() 函数不返回任何内容?
- 如何在arduino或Raspberrypi上制作600MHz环路?
- 为什么在环路条件中使用'<='而不是'<'会产生分段错误 [SIGSEGV]?
- C++网络,recv() 无缘无故失败 (?)
- 使用 std::mutex 保护环路
- 设置SO_RCVTIMEO时,为什么recv返回-1并且errno=EINTR
- TCP套接字(客户端-服务器)recv()返回-1值
- 在UNIX中通过recv/send交换数据时,如何正确使用缓冲区
- C++中TCP套接字的recv函数
- 仅通过建立一次TCP连接将Recv从客户端发送到服务器套接字
- 在信号槽机制与传统环路之间做出决定
- 无盖插座的紧密RECV环路
- 插座RECV卡在环路中