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.
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
@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