(4): ParallelFlowable의 병렬 처리 수준만큼 Scheduler.createWorker를 호출해서 스레드를 생성합니다. Buffer size는 기본 설정 128개와 동일합니다.
(5): 각 ParallelFlowable의 값을 병합 작업을 진행합니다.
(6): 해당 작업이 모두 테스트 스레드 Test worker에서 실행되지 않기 때문에 block을 진행합니다.
parallel
toFlowable() 메서드로 Flowable 처리를 진행했던 것을 parallel 처리하기 위해서 parallel() 메서드를 사용합니다. 해당 레일은 자체적으로 병렬로 실행되지 않으며 각 레일이 병렬로 실행하려면 runOn()메서드의 호출이 필요합니다. 이때 Schedulers.io()를 사용합니다. Schedulers.io()는 I/O 관련 작업을 수행할 수 있는 무제한의 워커 스레드를 생성하는 스레드를 제공한다. 해당 테스트 환경은 12 코어기 때문에 12 스레드를 사용하게 됩니다.
sequential
parallel메서 여러 레일을 생성하는 것을 다시 단일 스퀀스로 병합하기 위해서 사용합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
... Mapping orderId :15 RxCachedThreadScheduler-3 Mapping orderId :18 RxCachedThreadScheduler-6 Mapping orderId :22 RxCachedThreadScheduler-10 Received orderId :8 RxCachedThreadScheduler-8 Mapping orderId :16 RxCachedThreadScheduler-4 Received orderId :1 RxCachedThreadScheduler-8 Mapping orderId :23 RxCachedThreadScheduler-11 Received orderId :2 RxCachedThreadScheduler-8 Received orderId :3 RxCachedThreadScheduler-8 Received orderId :4 RxCachedThreadScheduler-8 Mapping orderId :14 RxCachedThreadScheduler-2 Received orderId :5 RxCachedThreadScheduler-8 Mapping orderId :24 RxCachedThreadScheduler-12 ...
Mapping, Received 스레드를 확인 1~12 스레드를 모두 사용하는 것을 확인할 수 있습니다. 해당 스레드는 모두 메인 스레드인 Test worker에서 진행되지 않습니다.