Гарантирует ли zip параллельность в RxJava

«Гарантирует ли zip параллельность в RxJava» — вопрос из категории Реактивное программирование, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, zip в RxJava не гарантирует параллельность по умолчанию. Он просто комбинирует эмиты нескольких Observable в один, дожидаясь, когда каждый источник выдаст соответствующий элемент. Параллельность зависит от Scheduler, на котором работают источники.

Пример:

Observable.zip(
    Observable.just(1).subscribeOn(Schedulers.io()),
    Observable.just("A").subscribeOn(Schedulers.io()),
    { num, str -> "$num$str" }
).subscribe { println(it) } // "1A"

Здесь оба Observable работают на Schedulers.io(), поэтому обработка происходит параллельно. Без subscribeOn всё выполнится в одном потоке.