728x90
코루틴은 채널을 통해 데이터를 전달/전송 받는다.
코루틴 채널 종류
https://kotlinlang.org/docs/coroutines-and-channels.html#testing-coroutines
- Unlimited channel
- Unlimited channel 은 큐에 가장 가까운 채널이다. 생산자들은 이 채널에 요소를 무제한 요소를 보낼 수 있다.
- send() 호출은 중단되지 않으며, 프로그램에 메모리가 부족하면, 메모리 부족 예외가 발생한다
- 큐와 Unlimited channel 차이는 소비자가 빈 채널에서 receive()를 시도할 때, 새로운 요소가 전송될 때까지 중단된다는 차이점이 있다.
- Buffered channel
- 버퍼링된 채널의 크기는 지정된 숫자에 의해 제한되고, 생산자는 크기 제한에 도달할 때까지 이 채널로 전송할 수 있다.
- 모든 요소는 내부적으로 저장이 되며, 채널이 꽉 차면 더 많은 공간을 사용할 수 있을 때 까지 채널에 대한 send() 호출이 중단된다.
- Rendezvous channel(디폴트 값)
- 버퍼가 없는 채널로 크기가 0인 Buffered channel과 같다(send()/ receive() 중 하나는 다른 함수가 호출될 떄까지 항상 중지된다)
- send() 함수가 호출되고 요소를 처리할 준비가 된 일시 중단된 수신 호출이 없으면, send()가 일시 중단됩니다.
- 반대로 recieve() 함수가 호출되고 요소를 보낼 준비가된 일시 중단된 송신 호출이 없으면 recieve() 호출이 일시 중단됩니다.
- Conflated channel
- 통합 채널로 전송된 새 요소는 이전에 전송된 요소를 덮어 쓴다
- recieve() 함수는 항상 최신의 요소만 가지고 오며, send() 호출이 일시 중단되지 않는다.
코루틴에서의 channel
produces라는 이름의 편리한 코루틴 빌더와 소비자 쪽의 for 루프를 대체하는 확장 기능 consumeEach가 있다.
val squares = produceSquares()
squares.consumeEach { println(it) }
println("Done!")
728x90
'스터디 노트 > 잡것' 카테고리의 다른 글
| Coroutine과 RXJava/RxKotlin 비교 (0) | 2023.01.03 |
|---|---|
| Patch Null 체크 (0) | 2022.06.29 |
| 트러블 슈팅 (0) | 2022.05.11 |
| 프로젝트에 도움이 되는 URL (0) | 2022.05.02 |
| Null Object pattern (0) | 2022.01.17 |