[코루틴] 코루틴 쉽게 쓰기 (feat. 자주하는 실수들)
긴 스터디 끝에 읽으면 좋은 내용들만 정리했습니다.
코루틴이란?
coroutine → co(cooperative 협력) routine(루틴) 서로 협력하는 루틴이라는 의미입니다.
함수와 자원을 공유하면서도 동시에 실행될 수 있는 비동기 작업을 지원하기 위해 사용됩니다. 코루틴은 협력적 멀티태스킹을 통해, 실행 중인 루틴이 자발적으로 실행을 일시 중지
하고 다른 루틴에 실행(스레드)을 양도
할 수 있습니다. 이는 프로그램의 다른 부분이 필요할 때 실행을 계속할 수 있게 하여 자원 사용의 효율성
을 높입니다
코루틴 왜 써야하는가?
코틀린을 위한 강력한 비동기 솔루션으로, 아래와 같은 장점이 있습니다.
- 간단하게 비동기 로직을 구현할 수 있고,
- 예측이 어려운 비동기 작업을
구조화된 동시성
원칙을 적용해 비동기 작업을 구조화 → 비동기 작업을 어느정드 예측하여 코드 작성 가능 - 코루틴이 동작하는 범위를 한정해 관리하여 안정성을 높일 수 있습니다.
- 코루틴은 스레드 생성보다 훨신 가벼워서, 비동기에 대한 비용이 적습니다.
결론적으로
제가 생각했을 때, 서버에서는 구조화된 동시성을 이용해 부모에서 자식 코루틴을 전부 종료시키는 상황은 크게 없긴 합니다. (앱에서는 하위 코루틴을 전부 종료시킬 일이 많겠지만 서버에서는 그런 경우는 크게 없으니…)
그럼에도 불구하고, 다음과 같은 장점으로도 충분히 정말 충분히 쓸만한 가치가 있다고 생각함
- 비동기이지만 그 흐름을 컨트롤 가능하다는 점
- 병렬이 아닌 중단을 통한 리소스를 최소로 쓰면서 동시성 효과를 낼 수 있다는 점 (병렬도 손쉽게 쓸 수 있지만)
- webflux에 비해 코드 가독성도 좋다는 점(러닝 커브는 막상 공부해보니 큰다고 생각됨)
단점은 잘 모르고 쓰면 성능 향상이 없을 수 있음 가령, blocking call을 코루틴에서 사용하면 Dispatchers를 달아놓지 않는 한 main 흐름도 blocking 됨.
댓글남기기