В однопоточных приложениях, особенно в C, я всегда использовал оболочки для select()
, которые поддерживают приоритетную кучу таймеров для вызова в будущем, а также массивы файловых дескрипторов для контроля читабельности, возможности записи, и исключения. Библиотека X- Windows Xt имеет «Событие L oop» внутри XtAppMainLoop()
, которое делает именно это.
В многопоточных приложениях, например, с десятками одноранговых процессов для взаимодействия и сотнями или тысячи событий таймера, зарегистрированных в go, в будущем, какие подходы часто используются, кроме использования однопоточного решения select()
(или его более высокопроизводительных эквивалентов, таких как epoll()
) в многопоточном контексте?
Вопрос в основном для C ++ 11 и новее, на Linux, но если есть решения Microsoft 1011 c, я бы тоже хотел получить общее представление о них.