Спецификация POSIX (выберите) - это место для поиска определения select
. Я лично рекомендую poll
- он имеет лучший интерфейс и может обрабатывать любое количество дескрипторов, а не системный предел.
Если я правильно понимаю, вы пробуждаете темы, основываясь на состоянии определенных дескрипторов. Лучше было бы, чтобы каждый поток имел собственный дескриптор и вызывал саму себя. Видите ли, select не изменяет состояние системы, и до тех пор, пока вы используете локальные переменные потока, это будет безопасно. Однако вы определенно захотите убедиться, что не закрываете дескриптор, от которого зависит поток.
Использование select
/ poll
с таймаутом оставляет «ожидание» на стороне ядра, что означает, что поток обычно переводится в спящий режим. Пока поток спит, он не использует процессорное время. С другой стороны, цикл while / for при вызове select
без тайм-аута даст вам более высокую загрузку ЦП, поскольку вы постоянно вращаетесь в цикле.
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ: Кроме того, select
/ poll
может иметь непредсказуемые результаты при работе с одним и тем же дескриптором в нескольких потоках. Простая причина этого в том, что первый поток может быть разбужен, потому что дескриптор готов к чтению, но второй поток должен ждать пробуждения next , доступного для чтения.
Пока вы не select
не используете один и тот же дескриптор в нескольких потоках, у вас не должно быть проблем.