Разъем ввода / вывода в режиме epoll, перекрывающийся ввод / вывод - PullRequest
1 голос
/ 25 марта 2011

Я работаю в клиент-серверном приложении, где мне нужно управлять несколькими сокетами соединения 1000+.

Путем исследования я обнаружил, что Overlapped I / O или Completion Port хороши для демультиплексирования нескольких сокетов в Windows, а epoll - для Linux.

  1. Отличается ли epoll от перекрывающегося порта ввода-вывода или порта завершения в Windows.
  2. Я хотел использовать boost, поскольку он работает как на Windows, так и на Linux.

Можно ли реализовать эти методы (epoll и Overlapped I / O или Completion Port), используя boost?

1 Ответ

3 голосов
/ 25 марта 2011

Реализация epoll в Linux и порты завершения ввода / вывода в Windows различны, однако Boost.Asio приятно абстрагирует различия для вашего приложения.В этом вся суть io_service очереди реактора :

Windows NT, 2000, XP, 2003 и Vista

Механизм демультиплексирования:

  • Использование перекрывающихся портов завершения ввода-вывода и ввода-вывода для всех операций асинхронного сокета, кроме асинхронного подключения.
  • Использование выбора для эмуляции асинхронного подключения.

Ядро Linux 2.6

Механизм демультиплексирования:

  • Использует epoll для демультиплексирования.
...