чем HawtDispatch отличается от исполнителей Java? (и нетти)

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

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

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


person Shahbaz    schedule 17.02.2012    source источник


Ответы (1)


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

  • Глобальная очередь отправки: отправленные объекты Runnable выполняются одновременно (вы получаете тот же эффект, используя исполнитель Executors.newFixedThreadPool(n))
  • Очередь последовательной отправки: отправленные объекты Runnable выполняются последовательно (вы получаете тот же эффект, используя исполнитель Executors.newSingleThreadExecutor())

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

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

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

person Hiram Chirino    schedule 19.02.2012
comment
Спасибо @Хирам. Надеюсь, вы немного расширите документацию по HawtDispatch, чтобы представить ее тем, кто ничего не знает о libdispatch от Apple. Честно говоря, это описание — хорошее начало. Возможно, что-то, что расширяет преимущества HD по сравнению с использованием Executors. - person Shahbaz; 21.02.2012
comment
@Shahbaz GCD имеет право регулировать размер пула в зависимости от того, сколько ядер ЦП доступно и насколько они заняты в данный момент. Я видел, как увеличивается количество потоков, когда многие задания в очереди привязаны к вводу-выводу, поэтому ЦП остается загруженным. Однако HawtDispatch, похоже, этого не делает. - person adib; 20.09.2016