我通过tcp和以下代码读取高频数据
while (1) {
lrev = recv(fd, buff, 80, MSG_WAITALL);
dowork();
}
我通过线程运行此代码并将此线程分配给特定的CPU核心。我可以看到使用100%CPU的特定核心。是因为while(1)循环?延迟目的是好还是坏?
我的进程有5个线程,每个线程在不同的核心上运行。我的总CPU使用率约为400%。
由于
答案 0 :(得分:2)
我们没有看到您的所有代码,但有一段时间(1)处理非阻塞函数通常会在其受限制的CPU上旋转100%
对于非常对延迟敏感的系统,它通常是好的(如果你想最小化数据包到达网卡之间的时间/延迟和你开始处理它的时间)
然而,您接到MSG_WAITALL might block的电话会对您的延迟造成影响
该标志请求操作块直到满足完整请求。
唯一明确的答案是,判断它是好还是坏:在所有情况下衡量你的延迟。
编辑:
由@ Captain Obvlious评论,您必须检查recv