seoft

[Rx,Kotlin] list to stream 병렬처리 순차적 응답받기 본문

android

[Rx,Kotlin] list to stream 병렬처리 순차적 응답받기

seoft 2020. 7. 13. 23:06

concatMapEager는 기존 concatMap 역할에서 스트림이 병렬로 처리된다는 특징을 가지고 있다.

그렇기 때문에 동시성과 함께 순서가 보장되어야 될 경우 concatMapEager 연산자를 사용하면 된다.


여러 api host로부터 값을 받오는 즉시 처리하되, 순서를 보장해야되는게 요구사항이라고 가정을 해본다.

 

 

request함수를 사전 정의 하였는데 각 url에 따른 randome 시간 후에 response가 오는 상황으로 가정하고 해당 함수를 거쳐 Single로 반환된다.

 

url string 리스트를 개별 flowable로 반환하여 concatMapEager내에서 하나씩 태우게 되고 반환된 Single 결과값을 flowable으로 변환에 스트림을 진행한다.

위의 코드 결과 log

string리스트의 순서와 동일하게 결과값이 찍히는걸 볼 수 있으며 총 시간 측정 값도 2초내로 들어오는걸 보아 concatMap과 달리 병렬로 처리되는 것을 알 수 있다.

 

RxJava, RxKotlin 경우에는 concatMapEager 연산자가 준비 되있지만

작성하고 생각해보니 다른 언어에서 future가 없다;; (혹시 다른 언어에서 해당 연산자가 없을경우 toFuture을 사용하여 구현할 수 도 있다)

 

결과는 위와 동일하다.

Comments