выберите (), большой системный вызов. Можно упаковать любое количество дескрипторов файлов, дескрипторов сокета, каналов, и т.д. и уведомляться синхронным способом, когда введенный становится доступным.
Существует ли способ создать interval/oneshot таймер и использовать его с выбором ()? Это сохранило бы меня от наличия нескольких потоков для IO и синхронизации.
timerfd_create делает именно это. Это довольно недавнее дополнение к ядру Linux, которое, возможно, еще не во всех дистрибутивах.
Используйте параметр тайм-аута - сохраняйте события таймера в очереди с приоритетом, проверьте верхнюю элемент и установите время ожидания соответственно - если время ожидания истекло, вы можете проверить, готово ли событие к запуску, запустить событие и продолжить.
По крайней мере, я так делаю.
Обратите внимание, что опрос имеет более приятный интерфейс (в некотором смысле) и может быть более эффективным с большим количеством файловых дескрипторов.