루틴이란 무엇인가?
우리는 Routine을 운동 루틴 혹은 공부 루틴과 같은 '특정한 일을 하기 위한 일련의 처리 과정'이란 뜻으로 사용한다. 비슷하게 전통적으로 프로그래밍에서는 루틴을 '특정한 일을 처리하기 위한 일련의 명령'으로 사용해 왔다. 실제로 구글에 routine을 찾으면 아래와 같이 나온다.
루틴(Routine)이란 컴퓨터 프로그램의 일부로써 특정한 일을 실행하기 위한 일련의 명령이다.
우리는 프로그래밍에서 이러한 일련의 명령을 함수라 부른다. 자 이제 서브루틴(Sub-Routine)에 대해 알아볼 준비가 되었다.
서브루틴이란 무엇인가?
프로그래밍에서는 함수 안에 함수가 있을 경우 바로 안쪽의 함수를 서브루틴이라 부른다.
예를 들어 아래와 같은 코드가 있다고 해보자.
fun routine1(){
routine2() // 서브루틴
}
fun routine2(){
println("Routine 2")
}
코드에서 routine1을 실행하면 routine2가 속에서 수행된다. 우리는 이러한 routine2를 routine1의 서브루틴이라 부른다. 즉, 서브로 실행되는 함수를 서브루틴이라 부르는 것이다. 서브루틴은 루틴에 대해 순차적으로 수행된다는 특징이 있다. 만약 루틴이 수행이 되지 않을 경우 서브루틴 또한 수행되지 않는 것이다.
함수 안에 함수가 있을 경우 바로 안쪽의 함수를 서브루틴이라 부른다.
그러면 도대체 Co-Routine(코루틴)이란 무엇일까?
코루틴이란 무엇인가?
코루틴이란 함께(Co)이 수행되는 함수(Routine)이다.
예를 들어 아래와 같은 코루틴이 있다고 해보자.
여기서 Coroutine1속에서 Coroutine2가 수행되는 것이 아니다. 각각은 서로 다른 함수(Routine)이며, 함께 수행되고 있다. 이들이 하나의 스레드를 점유하고 있을 때 한 Routine이 다른 Routine에게 Thread 점유 권한을 양보함으로써 함께 수행되는 것이다.
이는 서브루틴과는 다르다. 루틴 속의 서브루틴은 무조건 순차적으로 수행되어야 하지만 Coroutine은 함께 수행되며 서로 무제한 양보를 할 수 있다. 예를 들어 아래의 그림과 같이 Coroutine1과 Coroutine2는 여러번 양보를 수행하며 같이 수행될 수 있다. 이렇게 하면 스레드의 자원을 최대한 활용할 수 있어 최고이다.
이와 관련해 더 알고 싶으면 [Coroutine] Coroutine은 어떻게 스레드 작업을 최적화 하는가? 글을 참고하길 바란다.