2012-02-17 13 views
11

Frustracja, strona internetowa HawtDispatch opisuje ją jako "pulę wątków i interfejs API do zgłaszania zdarzeń NIO."Czym różni się HawtDispatch od Executorów Java? (i netty)

Najpierw weźmy część "łączenia gwintów". Większość Executorów dostarczanych przez Javę to także w zasadzie pule wątków. Czym różni się HawtDispatch?

Jest to również "interfejs API do zgłaszania zdarzeń NIO". Zakładam, że jest to cienka warstwa na wierzchu NIO, która pobiera dane przychodzące i przechodzi do pojęcia "puli wątków" i przekazuje ją konsumentowi, gdy program planujący pula wątków znajdzie czas. Poprawny? (Z zadowoleniem przyjmujemy wszelkie ulepszenia w stosunku do NIO). Czy ktoś wykonał jakąkolwiek analizę wydajności netty vs HD?

Odpowiedz

17

HawtDispatch został zaprojektowany jako pulę wątków o stałym rozmiarze o stałym rozmiarze. Zapewnia implementuje 2 smaki Java Wykonawcami:

  • Globalny Wysłanie kolejki: Zgłoszony Runnable przedmioty są wykonywane jednocześnie (można uzyskać ten sam efekt przy użyciu Executors.newFixedThreadPool(n) wykonawcę)
  • seryjny Wysłanie kolejki: Zgłoszony Runnable przedmioty są wykonywane seryjnie (masz ten sam efekt przy użyciu Executors.newSingleThreadExecutor() wykonawcę)

przeciwieństwie do modelu executora java wszystkie globalne i szeregowe kolejki wysyłki dzielić jeden stały rozmiar puli wątków. Możesz użyć tysięcy kolejek seryjnej wysyłki bez zwiększania liczby wątków. Szeregowe kolejki wysyłkowe mogą być używane tak jak skrzynki pocztowe Erlang do sterowania aplikacjami typu reaktywnego.

Ponieważ HawtDispatch używa puli wątków o ustalonym rozmiarze do przetwarzania wszystkich wykonań kolejek globalnych i szeregowych, wszystkie wykonywane przez nie aplikacje Runnable muszą być blokowane. W pewnym sensie jest to podobne do architektury NodeJS, z wyjątkiem tego, że używa wielu wątków zamiast tylko jednego.

W porównaniu do Netty, HawtDispatch nie jest ramą do rzeczywistego przetwarzania danych gniazda. Nie zapewnia ram dla sposobu kodowania/dekodowania, buforowania i przetwarzania danych gniazda. Wszystko, co robi, to wykonanie skonfigurowanego przez użytkownika Runnable, gdy dane można odczytać lub zapisać na nieblokującym gnieździe. Od ciebie zależy, czy rzeczywiście odczytasz/zapiszesz dane gniazda.

+3

Dzięki @Hiram. Mam nadzieję, że rozszerzysz nieco dokumentację HawtDispatch, aby przedstawić ją tym, którzy nie wiedzą nic o libdispatch firmy Apple. Szczerze mówiąc, ten opis to dobry początek. Być może coś, co rozszerza korzyści płynące z HD, po prostu używając Executorów. – Shahbaz

+0

@Shahbaz GCD ma uprawnienia * do dostosowania * rozmiaru puli w zależności od liczby rdzeni procesora i aktualnej aktywności. Widziałem to zwiększenie liczby wątków, gdy wiele zadań w kolejce jest związanych I/O, a więc utrzymanie procesora zajęty. Jednak HawtDispatch nie wydaje się tego robić. – adib