Что происходит внутри, когда сервер Netty получает 100 запросов в секунду, каждый из которых включает доступ к реактивным базам данных. Как эти запросы сопоставляются с 40 потоками, которые сервер Netty порождает по умолчанию?
Вкратце, он берет эти запросы и назначает их в стиле «циклического перебора» каждому доступному базовому потоку (по мере того, как эти потоки становятся доступными). То же самое происходит и со всеми другими реактивными вызовами, конечно, с оговоркой, что в зависимости от конфигурации, они могут работать на других планировщиках и, следовательно, на других базовых пулах потоков с другим количеством потоков.
Чем флюс отличается от волокна?
Это очень большая тема, но обзор «высокого уровня» заключается в том, что поток (под которым я предполагаю, что вы подразумеваете «реактивную» Java, а не саму Flux
) является асинхронной моделью, в которой ни один поток не может блокироваться, а волокна являются «зелеными». " потоки, предназначенные для синхронного использования, которые используют упреждающее планирование (среди других методов) для сопоставления с гораздо меньшим количеством базовых потоков уровня ядра.
На практике это означает, что вы можете использовать почти ту же модель многопоточности и методы кодирования, которые вы используете сегодня с волокнами, но реактивное программирование потребует от вас принятия новых парадигм.
Как Flux гарантирует асинхронное поведение с ограниченным количеством потоков?
Все очень просто, потому что он спроектирован как асинхронный. Вопрос здесь, похоже, основан на ложной предпосылке: асинхронное поведение не гарантируется или не гарантируется количеством доступных потоков, а вашей моделью (оно не может «перетекать» в синхронное поведение, если оно перегружено запросами. )
person
Michael Berry
schedule
15.03.2020