Знакомство с основами асинхронного программирования на * nix

В течение некоторого времени я много искал в Google, чтобы узнать о различных способах достижения асинхронного программирования / поведения на машинах nix и (как мне было известно ранее) был подтвержден тот факт, что до сих пор нет ИСТИННОГО асинхронного шаблона (параллелизм с использованием одного потока) для Linux, доступного для Windows (IOCP).

Ниже приведены несколько альтернативных вариантов для Linux:

  1. select / poll / epoll :: Невозможно сделать с использованием одного потока, поскольку epoll все еще блокирует вызов. Также отслеживаемые файловые дескрипторы должны быть открыты в неблокирующем режиме.
  2. libaio :: Что я узнал, так это то, что его реализация - отстой, и его все еще основаны на уведомлениях, а не на завершении, как в портах завершения ввода-вывода Windows.
  3. Boost ASIO :: Он использует epoll под linux и, следовательно, не является истинным асинхронным шаблоном, поскольку порождает потоки, которые полностью абстрагируются от пользовательского кода для реализации шаблона проектирования проактора.
  4. libevent :: Любая причина пойти на это, если я предпочитаю ASIO?

А теперь вопросы:)

  1. Каким будет лучший шаблон проектирования для написания быстрого масштабируемого сетевого сервера с использованием epoll (конечно, здесь придется использовать потоки :()
  2. Я где-то читал, что «в неблокирующем режиме можно открывать только сокеты», следовательно, epoll поддерживает только сокеты и, следовательно, не может использоваться для дискового ввода-вывода. Насколько верно приведенное выше утверждение и почему асинхронное программирование не может выполняться на дисковом вводе-выводе с использованием epoll?
  3. Boost ASIO использует одну большую блокировку вокруг вызова epoll. На самом деле я не понимал, какие могут быть последствия и как их преодолеть с помощью самого asio. Аналогичный вопрос
  4. Как мне изменить шаблон ASIO для работы с дисковыми файлами? Есть ли какой-нибудь рекомендуемый шаблон проектирования?

Надеюсь, кто-нибудь также сможет ответить на все вопросы с хорошими пояснениями. Также приветствуются любые ссылки на источник, где объясняются детали реализации шаблонов проектирования epoll и AIO.

16
задан Community 23 May 2017 в 12:09
поделиться