Scheduler
Scheduler를 위한 전용 Operator
- publishOn() : Operator 체인에서 Downstream Operator의 실행을 위한 쓰레드를 지정한다.
- subscribeOn() : 최상위 Upstream Publisher의 실행을 위한 쓰레드를 지정한다. 즉 원본 데이터 소스를 emit하기 위한 스케줄러를 지정한다.
- paraller(): Downstream 에 대한 데이터 처리를 병렬로 분할 처리하기 위한 쓰레드를 지정한다.
ParallelFlux의 동작 방식
Flux.fromArray(new Integer[]{1, 3, 5, 7, 9, 11, 13, 15})
.parallel()
.subscribe(Logger::onNext);
Flux.fromArray(new Integer[]{1, 3, 5, 7, 9, 11, 13, 15})
.parallel()
.runOn(Schedulers.parallel())
.subscribe(Logger::onNext);
// 8개 -> 10개 데이터
Flux.fromArray(new Integer[]{1, 3, 5, 7, 9, 11, 13, 15, 17, 19})
.parallel()
.runOn(Schedulers.parallel())
.subscribe(Logger::onNext);
Flux.fromArray(new Integer[]{1, 3, 5, 7, 9, 11, 13, 15, 17, 19})
.parallel(4)
.runOn(Schedulers.parallel())
.subscribe(Logger::onNext);
publishOn()과 subscribeOn() 동작 이해 1
Operator 체인에서 최초 쓰레드는 subscribe()가 호출되는 scope에 있는 쓰레드이다.
pulishOn()과 subscribeOn() 동작 이해 2
Operator 체인에서 publishOn()이 호출되면 publishOn() 호출 이후의 Operator 체인은 다음 publishOn()을 만나기전까지 publishOn()에서 지정한 Tread에서 실행이 된다.
pulishOn()과 subscribeOn() 동작 이해 3
Operator 체인에서 publishOn()이 호출되면 publishOn() 호출 이후의 Operator 체인은 다음 publishOn()을 만나기전까지 publishOn()에서 지정한 Tread에서 실행이 된다.
pulishOn()과 subscribeOn() 동작 이해 4
subscribeOn() 은 최상위 Upstream Publisher의 실행 쓰레드를 subscribe() 호출 scope의 쓰레드에서 subscribeOn()에서 지정한 쓰레드로 바꾼다.
pulishOn()과 subscribeOn() 동작 이해 5
subscribeOn()과 publishOn()이 같이 있다면, publishOn()을 만나기 전 까지의 Upstream Operator 체인은 subscribeOn()에서 지정한 쓰레드에서 실행되고, publishOn()을 만날때 마다 publishOn() 아래의 Operator 체인 downstream은 publishOn()에서 지정한 쓰레드에서 실행된다.
pulishOn()과 subscribeOn() 동작 이해 6
subscribeOn()이 publishOn()이 뒤에 위치하든 상관없이 publishOn()을 만나기 전 까지의 Upstream Operator 체인은 subscribeOn()에서 지정한 쓰레드에서 실행된다.