Отличия Schedulers⁠ от Schedulers⁠.computation() в RxJava?

Schedulers.computation( ) — это scheduler, предназначенный для выполнения вычислительной работы. Он основан на ограниченном числе потоков, по умолчанию равном количеству потоков процессора вашего компьютера. Каждая задача, которая поступает на этот scheduler помещается в очередь задач, каждый новый освободившийся поток берет первую задачу из очереди.

Schedulers.io() — предназначен для работы, связанной с вводом-выводом, такой как например запрос к серверу(да и в целом любые блокирующие I/O операции), этот scheduler основан на пуле потоков, способном расти когда это необходимо. Ключевым его отличием от computation() является то, что он не помещает каждую поступившую задачу в очередь, он выделяет под каждую задачу отдельный поток из пула.

Если же в пуле потоков нет свободного, то он создает новый поток и добавляет его в пул. Таким образом и способен расти пул потоков Schedulers.io(). Но тут стоит быть аккуратным, потому что пул способен только расти, он не будет уменьшаться, и поэтому будет занимать место в памяти на протяжении всей работы программы.

Поделиться уроком

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *