Domain/Reactive Programming

ObserveOn(), SubscribeOn(), PublishOn()

by Donghwan 2023. 5. 12.

Reactive Programming에서 작업 스레드 관리는 보통 두가지 연산자를 사용하여 처리됩니다. 아래는 그 두 예시입니다. 또 대표적으로 사용되는 ReactiveX와 Reactor의 관점에서 보겠습니다.

 

subscribeOn()

ReactiveX의 관점에서의 SubscribeOn은 데이터를 생성하고, I/O 작업을 수행하는 스레드를 지정합니다. 즉, Observable을 실행할 스레드를 결정하는 메함수로 Observable이 Subscribe 되었을 때, 어떤 Thread에서 실행할지를 결정하는 역할을 합니다. 이를 통해, CPU 작업과 I/O 작업이 동시에 일어나는 비동기 처리를 가능케 합니다. 이때, 지정되는 Thread는 ReactiveX의 Schedulers에서 선택할 수 있습니다.

Reactor의 관점에서의 SubscribeOn은 내부 스케줄러를 사용하여 스트림의 구독(subscription)이 발생하는 스레드를 변경합니다. 따라서 구독이 발생하는 시점과 구독자의 작업이 어떤 스레드에서 실행되는지를 제어합니다. Reactor의 Scheduler를 사용하여 비동기 작업을 처리하는 스레드를 지정합니다.

 

observeOn()

ObserveOn은 ReactiveX에 존재하는 작업 스레드를 스위칭하는 메서드입니다. Subscriber가 실행되는 스레드를 지정합니다. 쉽게 설명해서 이 함수가 적용된 Method-Chaining 이후의 작업을 ObserveOn에서 지정한 스레드에서 수행됩니다. 이를 통해, 현재 스레드에서 데이터를 처리하면서도 I/O 작업을 다른 스레드에서 수행하는 것과 같은 비동기 처리를 가능케 합니다.

 

publishOn()

PublishOn은 publishOn은 데이터 흐름을 변경하여 이후의 연산자 및 Subscriber가 다른 스레드에서 실행되도록 지정합니다. subscribeOn은 Flux 또는 Mono의 구독(subscription)이 시작되는 스레드를 변경하는 데 사용됩니다. 여기서 observeOn()은 ReactiveX의 관점에서의 용어이며 publishOn()은 Reactor의 관점에서의 용어라고 할 수 있습니다.

위 연산자들을 사용하여 스레드를 지정하면, Reactive Programming에서 비동기 처리를 쉽게 구현할 수 있습니다. 예를 들어, I/O 작업이 포함된 Observable에서는 subscribeOn()으로 I/O 스레드를 지정하고, 이후의 작업에 대한 업데이트는 observeOn() 또는 publishOn()을 통해 스레드를 지정할 수 있습니다.

728x90
반응형

'Domain > Reactive Programming' 카테고리의 다른 글

Hot vs Cold  (0) 2023.05.12
Reactive Programming?  (0) 2023.05.12

댓글