Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Реализация сетевого взаимодействия


Автор: Ares4322 27.4.2010, 13:19
Доброго времени суток!
Есть такая POSIX-библиотека aio. В ней - функции асинхронного ввода-вывода. Возможно ли заменить модель многопоточного синхронного блокируемого сетевого взаимодействия по TCP (когда на каждое соединение создается отдельный поток, в котором происходит блокировка на функции приема) на однопоточное асинхронное(когда на каждый новый сокет вешается callback-функция, которая вызывается при появлении данных )? И будет ли это эффективно?

Автор: djamshud 27.4.2010, 13:33
Не знаю. как с callbac-ами, но вообще это делают с помощью poll/select.

Автор: Ares4322 27.4.2010, 13:48
Вы меня не поняли. Poll / select - это неблокируемый синхронный ввод-вывод. То есть, чтобы получить данные мы должны вызвать функцию приема, а в асинхронном функция сама, так сказать нас вызывает. То есть при появлении данных останавливается основной поток выполнения программы, отрабатывает callback-функция, а потом программа продолжает работать дальше.

Автор: MAKCim 27.4.2010, 22:37
Ares4322, 
в Linux для сокетов pure асинхронная модель не поддерживается без патчинга ядра
насчет обработчиков...обратите внимание на буферизируемый ввод-вывод в libevent
хотя это не асинхронная библиотека

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)