Ответ 1
HawtDispatch предназначен для единого пула потоков фиксированного размера. Он обеспечивает реализацию 2 вариантов Java-исполнителей:
- Глобальная очередь отправки: Представленные Runnable объекты выполняются одновременно (вы получаете тот же эффект с помощью исполнителя
Executors.newFixedThreadPool(n)
) - Серийная очередь отправки: Представленные Runnable объекты выполняются серийно (вы получаете тот же эффект с помощью исполнителя
Executors.newSingleThreadExecutor()
)
В отличие от модели исполнителей java, все глобальные и последовательные очереди отправки используют один пул потоков фиксированного размера. Вы можете использовать тысячи очередей серийной рассылки, не увеличивая количество потоков. Серийные очереди отправки могут использоваться как почтовые ящики Erlang для приведения в действие приложений реактивного актера.
Так как HawtDispatch использует пул потоков фиксированного размера для обработки всех глобальных и последовательных очередей, все выполняемые Runnable задачи должны быть неблокируемыми. В некотором роде это похоже на архитектуру NodeJS, за исключением того, что используется несколько потоков вместо одного.
По сравнению с Netty, HawtDispatch не является основой для фактической обработки данных сокетов. Он не обеспечивает рамки для кодирования/декодирования, буферизации и обработки данных сокета. Все, что он делает, это выполнить настроенный пользователем Runnable, когда данные могут быть прочитаны или записаны в неблокирующем сокете. Это для вас приложение, а затем для фактического чтения/записи данных сокета.