繁体   English   中英

使用轮询系统调用等待fds时CPU使用率高

[英]High CPU usage while using poll system call to wait on fds

我有一个独特的问题,我的代码中使用的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
..
..
..
}
===============================================================

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM