Есть ли способ подражать epoll_wait с помощью kqueue / kevent? - PullRequest
0 голосов
/ 27 сентября 2010

У меня есть список файловых дескрипторов, для которых я создал kevents, и я пытаюсь выяснить, есть ли какой-нибудь способ получить число из них, готовых для чтения или записи.

Есть ли способ получить список "готовых" файловых дескрипторов, например, что обеспечивает epoll_wait?

Ответы [ 2 ]

2 голосов
/ 27 сентября 2010

Произошедшие события помещаются в буфер eventlist, передаваемый вызову kevent. Поэтому, сделав этот буфер достаточно большим, вы получите список, который вы ищете. Возврат Значение вызова kevent скажет вам, что у вас есть много событий находятся в буфере eventlist.

Если по какой-либо причине использование большого буфера невозможно, Вы всегда можете сделать цикл, вызывающий kevent с нулевым тайм-аутом и меньший буфер, пока вы не получите ноль событий в списке событий.

0 голосов
/ 05 марта 2012

Чтобы дать немного больше контекста ...

Один из ожидаемых сценариев с kevent () заключается в том, что вы будете выполнять потоковые вызовы к нему.Если у вас было 3 пула потоков, все из которых запрашивали 4 события, ОС хотела бы иметь возможность объединять и отправлять фактические события по своему усмотрению.

Если доступно 7 событий, ОС может захотеть отправить 3 потокам, или она может отправить все 3 потока, если считает, что у нее пустые ядра и меньше служебных данных.я не говорю, что ваш сценарий недействителен вообще;Просто система более или менее предназначена для того, чтобы держать эту информацию подальше от вас, чтобы она не попадала в сценарии «хорошо», 12 дескрипторов готовы.О, хм, я только что сказал вам, что 3 из них всплыли до того, как вы успели что-нибудь сделать ».Вы регистрируете / отменяете регистрацию своих дескрипторов один раз, и соответствующий дескриптор будет возвращен вам с событием, когда событие сработает.

...