Здравствуйте, Lavik, Вы писали:
L>Здравствуйте, okman, Вы писали:
А>>>...
O>>В Windows есть I/O Completion Ports, например (здесь).
O>>Предназначено специально для таких задач.
L>Спасибо за ответ, okman.
L>Возможно, то что вы предлагаете — это хорошое решение, но что делать если вы не используете Windows? хотелось бы узнать как решаются подобные задачи в общем случае, без привязки к конкретным OC.
L>К слову, I/O Completeon Ports, неявно использует пул трэдов, а хотелось бы, чтобы обработка всех запросов выполнялась в одном трэде.
Паттерн называется
реактор.
Эффективные решения обычно зависят от платформы.
В линуксе это epoll, в BSD — kqueue, в Windows, как уже сказали, completeon ports.
На C стоит использовать какую-нибудь обертку.
Наиболее легковесными и вроде как популярными являются libevents и более новая libev.
Для с++ это наверное boost.Asio
Если эффективность не столь важна, то можно использовать select или poll.
Указанные либы впрочем и это умеют.