【发布时间】:2013-09-30 11:45:56
【问题描述】:
我有一个独特的问题,我的代码中使用的 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
..
..
..
}
===============================================================
【问题讨论】:
-
你在轮询什么类型的 fd,sockets,fifo,pipe,files?
-
能贴出代码吗?
-
@Tiran 他们是套接字 fds
-
poll 的返回值真的是错误吗?这意味着它没有等待,所以你的代码只是循环。
-
@samairtimer 如果您有数千个并发连接,epoll 可能会有所帮助,如果您只有几个连接到几百个,它不会有太大帮助。