본문 바로가기
  • 🦄 창민이 개발일지
Computer Science

코루틴(Coroutine)

by 창민이 개발일지 2024. 4. 24.

코루틴

- Co-Routine :동시 실행 루틴

- Routine: 하나의 태스크로 함수 실행 단위이며, 경량 스레드라고 부름

- 정리하면 코루틴은 스레드안에서 실행되는 일시 중단 가능한 작업의 단위

https://kotlinworld.com/139

 

스레드(Thread)를 사용하는 이유

https://todaycode.tistory.com/179

위의 작업 화면 그리기, 네트워크 작업, 터치하기를 하나의 작업(스레드, 함수에서) 이루어지면 각 프로세스가 처리된 다음에 처리 되기 때문에 사용자 입장에서는 서비스가 멈추어 있는 거 처럼 보인다. 그래서 2개 이상의 작업을 사용해 동시에 실행시켜 실시간으로 동시에 처리되겠끔 보이도록 한다.

 

스레드의 문제점

https://todaycode.tistory.com/179

- Thread1 처리에 대해서 Thread2의 처리 결과를 필요할 시, Thread1의 작업은 그 즉시 실행이 멈추고 Thread2의 실행이 완료될 때 까지 기달린다. 이때 해당 자원은 사용되지 않기 때문에 자원 낭비가 발생하는 데, Blocking이라고 한다.

- 스레드는 비용이 매우 큰 객체이므로 여러 생성해서 처리시 느려지는 문제가 발생

 

위의 문제 해결책: Coroutine 등장

 

- 코루틴은 스레드 안에서 더 잘게 나누어지는 작업 단위

1. 코루틴 1이 생성돼 스레드1에 실행되고, 코루틴 2가 생성돼 스레드2에 실행된다.

2. 코루틴1 시행 도중 코루틴2의 실행 결과값을 필요시 코루틴1의 작업을 멈추고 스레드1에 코루틴3을 추가해 실행시킨다.

3. 코루틴 2의 결과가 반환되고 코루틴 3의 실행이 멈추고 스레드1의 사용권한을 반밥

4. 코루틴 1을 스레드1에 추가하고 실행하고 스레드2에슨 코루틴3를 실행시킨다.

 

https://gist.github.com/chaxiu/d87870528bbfe3e9d7e481e1f6acace1

- 코루틴은 스레드가 필요 없을 때 스레드의 사용 권한을 양보한다.

- 이를 통해 스레드를 블로킹하는 상황이 줄어 각 스레드를 최대한 활용할 수 있다. 

- 코루틴은 특정 스레드에 종속되어 있지 않아 매번 여러 스레드를 이동한다.

'Computer Science' 카테고리의 다른 글

Mysql 풀텍스트인덱스(Full-Text Index)  (0) 2024.05.08
클로저(Closure)  (0) 2024.04.24
순수함수(Pure Function)  (0) 2024.04.10
코틀린(Kotlin)  (0) 2024.04.07
병렬처리(Parallel Processing)  (0) 2023.04.06