Java Non -Блокирование и асинхронный ввод-вывод с NIO и NIO.2 (JSR203) - Реализации Reactor / Proactor

Итак, здесь я читаю одну из моих любимых книг по шаблонам программного обеспечения (Шаблонно-ориентированная архитектура программного обеспечения - Шаблоны для параллельных и сетевых объектов), в частности разделы по шаблонам асинхронного ввода-вывода Proactor / Reactor. Я вижу, как с помощью выбираемых каналов я могу довольно легко реализовать механизм асинхронного ввода-вывода в стиле Reactor (и сделал это). Но я не понимаю, как бы я реализовал правильный механизм Proactor с неблокирующей записью. Это использование преимуществ неблокирующих функций записи, управляемых ОС.

Функциональность, поддерживаемая специфичными для ОС вызовами, такими как GetQueuedCompletionStatus в win32.

Я действительно видел, что Java 7 привносит некоторые обновления в NIO с обработчиками асинхронного завершения (что, кажется, в правильном направлении). Что, как говорится... Учитывая отсутствие унифицированной кроссплатформенной поддержки для управляемых ОС асинхронных операций (в частности, асинхронной записи), я предполагаю, что это квази-реализация, которая не использует встроенную поддержку ОС.

Так что мои вопросы: обработка ввода-вывода на основе проактора возможно в Java таким образом, что его выгодно использовать для определенных сценариев; и, если Java NIO поддерживает обработку ввода-вывода на основе проактора (в Java 6 или Java 7), используется ли поддержка асинхронного ввода-вывода, управляемая ОС (т.е. обратные вызовы завершения из ОС)? Более того, если реализация осуществляется исключительно в виртуальной машине, то преимущества в производительности настолько малы, что использование упреждающей обработки событий предлагает не что иное, как другой (возможно, более простой) способ создания параллельного программного обеспечения для обработки сети.

Для всех, кто интересуется упреждающей обработкой событий , вот хорошая статья , в которой описаны плюсы и минусы и сравнение как с традиционными моделями потоков на соединение, так и с реактивными моделями ввода-вывода.

26
задан Jonas 2 August 2011 в 11:08
поделиться