RxJava 는 비동기를 위해 주로 사용되는데, 그냥 사용한다고 비동기 처리가 수행되는 것이 아니라, 스케줄러를 통해 스레드를 분리해주어야한다.
스케줄러란?
Scheduler 는 RxJava 의 코드가 어느 스레드에서 실행될 것인지를 지정하는 역할을 수행한다. 스케줄러의 지정은 subscribeOn, observeOn 연산자를 이용한다.
- subscribeOn: Observable 이 데이터의 흐름을 발생시키고 연산하는 스레드를 지정할 수 있다.
- 데이터를 발생시키는 쪽에서 흐름을 제어하기 위해 사용
- observeOn: Observable 이 Observer에게 알림을 보내는 스레드를 지정할 수 있다.
- 전달받는 쪽에서 데이터를 처리하는 부분을 위해 사용
스케줄러의 종류
- Schedulers.single(): 단일 스레드를 생성해 게속 재사용한다.
- Schedulers.computation(): 내부적으로 스레드풀을 생성하여, 스레드 개수만큼 프로세서 개수를 사용한다.
- CPU에 대응하는 계산용 스케줄러로 IO 작업을 하지 않고 일반적인 계산/연산 작업을 수행할 때 사용된다.
- 대기 시간 없이 빠르게 연산을 수행하기 위해 사용한다.
- Schedulers.io(): 필요할때마다 스레드를 계속 생성한다.
- 파일 입출력 등의 IO 작업을 하거나 네트워크 요청 처리 등의 상황에서 사용되는 스케줄러이다.
- 필요 할 때마다 스레드를 계속 생성한다. 만일 스레드풀에서 가져올 스레드가 있으면 생성하지 않고 사용한다.
- Schedulers.trampoline(): 현재 스레드에 무한한 크기의 대기 큐를 생성한다.
- Schedulers.newThread(): 매번 새로운 스레드를 생성한다.
- 매번 스레드가 생성되어 비용이 많이 들고 재사용도 되지 않는다.
참고 링크
Uploaded by
N2T