Я читал несколько документов по противодавлению в RxJava, но я не могу найти подробного объяснения, например, как это происходит внутри библиотеки, все просто резюмируют это, как «производитель» слишком быстрый, а «потребитель» слишком медленный.
Например, как в приведенном ниже коде:
Observable.interval(1, TimeUnit.MILLISECONDS)
.observeOn(Schedulers.newThread())
.subscribe(
i -> {
System.out.println(i);
try {
Thread.sleep(100);
} catch (Exception e) { }
},
System.out::println);
Я просматривал исходный код RxJava , поэтому я понимаю, что в основном потоке мы будем генерировать события каждые миллисекунды, и как только мы его испустим, мы передаем значение методу System.out.println (i) и бросаем его в пул потоков планировщика newThead и запустить метод внутри исполняемого файла.
Итак, мой вопрос: как происходит внутреннее исключение? Потому что, когда мы вызываем Thread.sleep (), мы просто спим поток, который обрабатывает вызов метода -> System.out.println (), не влияя на другие потоки в пуле потоков, почему это вызовет исключение. Это потому, что в пуле потоков больше нет доступных потоков?
Спасибо