0

epoll の使用法では、通常は次のようになります。

struct epoll_event ev,events[20];
epfd=epoll_create(256);
。。。
nfds=epoll_wait(epfd,events,40,500);

いくつかの記事では、maxeventsパラメーター in epoll_wait(つまり40in epoll_wait(epfd,events,40,500);) が size パラメーター in epoll_create(つまり256) を超えてはならないと言っています。

イベントは 20 個のイベント要素にしか登録できないため、パラメーターはinをmaxevents超えてはいけないと思います。そうではなく、アクティブなソケットが 40 個ある場合はどうなりますか?20ev, events[20]

ところで、20 を超えるソケットを登録し、20 を超えるアクティブなイベント (ソケット) がある場合、イベント配列events[20]には 20 のイベントしかありません。どうなりますか?

4

1 に答える 1

3

1 回の呼び出しでepoll_wait、最大で余裕のある数のイベントを受け取りますが、もちろん、それ以上のイベントがキューに入っている場合でも、イベントが失われることはありません。後の呼び出しでそれらを取得するだけです。とにかくループで呼び出すのでepoll_wait、それはまったく問題になりません。

私が考えることができる 1 つの興味深い考慮事項は、複数のスレッドが同じ epoll-fd から同時に読み取られる場合です。その場合、イベント配列のサイズによって、1 つのスレッドで処理されるイベントの数が決まります (つまり、数が小さいほど、並列処理が大きくなる可能性があります)。

于 2013-05-19T23:10:25.533 に答える