У меня есть 2 вопроса, которые относятся к модели с резьбой Vertx. The documentation упоминает:Vertx резьбовая модель
- Vert.x экземпляр поддерживает тему цикла событий N (где N по умолчанию является основным * 2) по умолчанию.
- Для уровней параллелизма требуется во многих современных приложениях, блокирующее подход просто не масштабируется
VertX также предоставляет функцию пула связанных потоков для обработки задач с использованием ресурсов сервера, требующие длительные периоды для обработки событий (рабочий потоки).
Итак, мы знаем, что потоки имеют накладные расходы с точки зрения требуемой памяти (например, для их стека) и при переключении контекста.
Потоки Vertx не блокируются (если они используются правильно), но если мы получили больше циклов событий, чем ядра (и пул потоков для рабочих потоков также), это не является неизбежным переключением контекста?
Второй вопрос. Я хочу понять, как vert гарантирует, что один цикл работает для цикла событий, учитывая тот факт, что переключение/планирование потоков выполняется на уровне ОС. Я красный в this documentation, что:
Контекст цикл событий выполняет обработчики на цикл событий: обработчики выполняются непосредственно на резьбу ввода-вывода, как следствие:
- обработчик будет всегда выполняться с одной и той же нити
- обработчик никогда не должен блокировать поток, иначе он создаст голод для всех задач ввода-вывода, связанных с этим циклом событий.
Может ли кто-нибудь уточнить «handlers are executed directly on the IO threads
»?