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 に答える