2

我有这个独特的问题,我的代码中使用的 linux 的 poll 系统调用获取了它等待轮询的 fds,我的意思是每毫秒 POLLIN。这会导致 CPU 使用率过高。我提供了 100 毫秒的超时,这似乎没有用。任何人都可以提出替代方案。

    for (;;) {

 ACE_Time_Value doWork(0, 20000);  
 ACE_OS::sleep(doWork);  ----------------------------> Causing low throughput, put to decrease CPU usage / On removing this we see high CPU , but throughput is achieved.
..
.
..
 if ((exitCode = fxDoWork()) < 0) {
  break;}

}

fxDoWork()
{
ACE_Time_Value selectTime;
selectTime.set(0, 100000);
..
..
..
ACE_INT32 waitResult = ACE_OS::poll(myPollfds, eventCount, &selectTime);-----------------------------> Pollin happens for every milli second/Timeout is not at all useful
..
..
..
}
===============================================================
4

1 回答 1

1

听起来您想积累足够的数据或发生特定的超时以减少 CPU 使用率,对吗?如果是这种情况,您可以使用 recvmmsg():http ://man7.org/linux/man-pages/man2/recvmmsg.2.html

recvmmsg() 系统调用是 recvmsg(2) 的扩展,它允许调用者使用单个系统调用从套接字接收多条消息。(这对某些应用程序具有性能优势。)对 recvmsg(2) 的进一步扩展是支持接收操作超时。

于 2013-09-30T12:09:11.023 回答