Если вы ищете что-то в точности как IOCP, вы его не найдете, потому что его не существует.
Windows использует модель уведомления о завершении (отсюда и порты ввода-вывода Завершение). Вы запускаете некоторую операцию асинхронно и получаете уведомление, когда эта операция завершена.
Приложения Linux (и большинство других Unix-подобных) обычно используют модель уведомления о готовности. Вы получите уведомление о том, что сокет может быть прочитан или записан без блокировки. Затем вы выполняете операцию ввода-вывода, которая не блокируется.
В этой модели вам не нужен асинхронный ввод-вывод. Данные немедленно копируются в / из буфера сокета.
Модель программирования для этого довольно сложна, поэтому существуют библиотеки абстракции, такие как libevent. Он обеспечивает более простую модель программирования и абстрагирует различия реализации между поддерживаемыми операционными системами.
В Windows также есть уведомление о готовой модели (выберите или WSAWaitForMultipleEvents), которое вы, возможно, уже видели раньше. Он не может масштабироваться до большого количества сокетов, поэтому не подходит для высокопроизводительных сетевых приложений.
Пусть это вас не смущает - Windows и Linux - совершенно разные операционные системы. То, что плохо масштабируется в одной системе, может хорошо работать в другой. Этот подход действительно очень хорошо работает в Linux, с производительностью, сопоставимой с IOCP в Windows.
person
BlackAura
schedule
12.05.2010
epoll
- это самый быстрый метод Linux для написания серверов. Обратите внимание, что Linux в настоящее время занимает большую долю рынка Интернет-серверов, чем Windows. - person unixman83   schedule 20.02.2012