TCP接收使用率100%CPU

时间:2014-06-01 05:34:41

标签: c++ multithreading sockets tcp cpu-usage

我通过tcp和以下代码读取高频数据

 while (1) {
    lrev = recv(fd, buff, 80, MSG_WAITALL);
    dowork();
 }

我通过线程运行此代码并将此线程分配给特定的CPU核心。我可以看到使用100%CPU的特定核心。是因为while(1)循环?延迟目的是好还是坏?

我的进程有5个线程,每个线程在不同的核心上运行。我的总CPU使用率约为400%。

由于

1 个答案:

答案 0 :(得分:2)

  • 我可以看到使用100%CPU的特定核心。是因为while(1)循环?

我们没有看到您的所有代码,但有一段时间(1)处理非阻塞函数通常会在其受限制的CPU上旋转100%

  • 延迟目的是好还是坏?

对于非常对延迟敏感的系统,它通常是好的(如果你想最小化数据包到达网卡之间的时间/延迟和你开始处理它的时间)

然而,您接到MSG_WAITALL might block的电话会对您的延迟造成影响

  

该标志请求操作块直到满足完整请求。

唯一明确的答案是,判断它是好还是坏:在所有情况下衡量你的延迟。

编辑:

由@ Captain Obvlious评论,您必须检查recv

返回的值