gpt4 book ai didi

c++ - 使用 poll 系统调用等待 fds 时 CPU 使用率过高

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:02:01 26 4
gpt4 key购买 nike

我有一个独特的问题,我的代码中使用的 linux 轮询系统调用获取它等待轮询的 fds,我的意思是每毫秒轮询一次。这会导致 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

The recvmmsg() system call is an extension of recvmsg(2) that allows the caller to receive multiple messages from a socket using a single system call. (This has performance benefits for some applications.) A further extension over recvmsg(2) is support for a timeout on the receive operation.

关于c++ - 使用 poll 系统调用等待 fds 时 CPU 使用率过高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19093399/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com