Re[3]: Одновременная обработка запросов без создания тредов
От: sts  
Дата: 01.08.11 09:24
Оценка: 6 (2)
Здравствуйте, 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.
Указанные либы впрочем и это умеют.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.