чем HawtDispatch отличается от исполнителей Java? (и нетто) - PullRequest
11 голосов
/ 17 февраля 2012

К сожалению, веб-сайт HawtDispatch описывает его как «API пула потоков и API-интерфейс уведомлений о событиях NIO».

Давайте сначала рассмотрим «пул потоков».Большинство исполнителей, предоставляемых Java, также в основном являются пулами потоков.Чем отличается HawtDispatch?

По-видимому, это также «API-интерфейс для уведомлений о событиях NIO».Я предполагаю, что это тонкий слой поверх NIO, который принимает входящие данные и передает их понятию «пул потоков» и передает их потребителю, когда планировщик пула потоков находит время.Правильный?(Любое улучшение по сравнению с NIO приветствуется).Кто-нибудь делал анализ производительности netty против HD?

1 Ответ

17 голосов
/ 19 февраля 2012

HawtDispatch разработан как единый системный пул потоков фиксированного размера.Он предоставляет 2 варианта реализации Java Executors:

  • Глобальная очередь отправки: отправленные объекты Runnable выполняются одновременно (Вы получаете тот же эффект, используя Executors.newFixedThreadPool(n) executor)
  • Serial Dispatch Queue: Переданные объекты Runnable выполняются последовательно (тот же эффект достигается с помощью Executors.newSingleThreadExecutor() executor)

В отличие от модели исполнителя java все глобальные и последовательные очереди отправки имеют общий пул потоков фиксированного размера.Вы можете использовать тысячи последовательных очередей отправки, не увеличивая количество потоков.Последовательные очереди отправки могут использоваться как почтовые ящики Erlang для управления приложениями в стиле реактивных акторов.

Поскольку HawtDispatch использует пул потоков фиксированного размера для обработки всех глобальных и последовательных выполнений очереди, все выполняемые задачи должны быть неблокирующими.,В некотором смысле это похоже на архитектуру NodeJS, за исключением того, что она использует несколько потоков вместо одного.

По сравнению с Netty, HawtDispatch не является платформой для фактической обработки данных сокетов.Он не предоставляет основы для того, как кодировать / декодировать, буферизовать и обрабатывать данные сокета.Все, что он делает, это запускает настроенный пользователем Runnable, когда данные могут быть прочитаны или записаны на неблокирующем сокете.Тогда ваше приложение должно действительно читать / записывать данные сокета.

...