Как RxJava на самом деле работает внутри в отношении многопоточности?

У меня есть опыт работы с RxJava, чтобы делать реактивные приложения. Однако мне интересно, как это (и другие библиотеки, такие как Spring Reactor) на самом деле работает внутри. Кажется, я не могу найти никакой интересной информации об этом в Интернете, только типичные простые учебники. Как обстоят дела с потоками и т. д.? Все ли «актеры» работают в одном потоке? Или это нить за "декларацию"?


person Kristof    schedule 29.03.2017    source источник
comment
Вы можете проверить источники и найти много интересного. Я не знаю точно о RxJava, но обычно модели акторов реализуются через пул потоков для кражи работы, например ForkJoinPool в java. Таким образом, все акторы работают с ограниченным количеством потоков, которое зависит от аппаратных потоков.   -  person bashnesnos    schedule 29.03.2017
comment
Внутреннему устройству RxJava посвящен целый блог: akarnokd.blogspot.hu . Большая его часть переносится на v2 относительно простым способом.   -  person akarnokd    schedule 29.03.2017


Ответы (1)


Одним из ключевых моментов RxJava является то, что он позволяет как владельцу API, так и потребителю выбирать модель выполнения (и изменять ее, не нарушая никаких интерфейсов). Если вы хотите предоставить наблюдаемое, которое выполняется в потоке вызывающего подписчика, внутри ExecutorService, на Актере и т. д., это зависит от вас. Точно так же вы можете подписаться на наблюдаемый объект, используя любую подходящую модель потоков — будь то блокировка в вызывающем потоке или в каком-либо пуле потоков. Суть в том, что сама библиотека не имеет отношения к модели многопоточности; вам нужно решить, что лучше всего подходит для рабочей нагрузки, которую вы выставляете.

person Chris Mowforth    schedule 29.03.2017