Асинхронный ввод / вывод в Mac OS X - PullRequest
5 голосов
/ 20 апреля 2010

Что означает проблема C10K , каков наилучший способ выполнить асинхронный ввод-вывод в Mac OS X (предполагается использовать на Mac и iPhone / iPad)?

В Linux наш выбор epoll , в Windows Порты завершения ввода / вывода .

Главный приоритет - производительность и масштабируемость (тысячи соединений).

UPDATE

OK. Поскольку Darwin - это BSD-подобная система, моя общая идея - использовать kqueue . Это правильное направление? Было бы приятно услышать от кого-то, кто имеет опыт в этой области.

Спасибо

Ответы [ 2 ]

3 голосов
/ 15 мая 2011

Boost.Asio - превосходная кроссплатформенная, высокопроизводительная сетевая библиотека C ++. В Mac OS X он использует kqueue для цикла событий реактора, другие платформы используют epoll, порты завершения ввода / вывода, опрос или выбор. Он может масштабироваться до тысяч соединений без проблем. Как следует из названия, он способствует асинхронному программированию, используя шаблон проектирования проактора для параллелизма без использования потоков.

1 голос
/ 15 мая 2011

Если вы используете libev, вы можете переключаться между различными совместимыми бэкэндами асинхронного ввода-вывода (epoll, kqueue, select и т. Д.), Не беспокоясь о деталях реализации.

http://software.schmorp.de/pkg/libev.html

...