안녕하세요. Coroutine에 대해 공부하고 있는 학생입니다.
학습 도중, suspend function에 대해 의문이 생겨 몇 가지 실험을 해보았습니다.
fun A: 시간이 오래 걸리는 함수A
fun B: 마찬가지로 시간이 오래 걸리는 함수B
1.
CoroutineScope(Dispatchers.IO).launch{
fun A()
}
CoroutineScope(Dispatchers.IO).launch{
fun B()
}
이것과
2.
CoroutineScope(Dispatchers.IO).launch{
suspend fun A()
}
CoroutineScope(Dispatchers.IO).launch{
suspend fun B()
}
이 두 방식의 차이가 궁금합니다.
학습 중 제가 이해한 것은, suspend 함수가 코루틴 Scope 내에서 일반 함수와는 달리
도중에 suspend를 통하여 다른 이에게 일을 넘겨줄 수 있다(프로세서를 넘겨준다 해야할까요?)고 이해하였습니다.
따라서 위 1, 2번 실험을 할 경우
2번은 fun A와 fun B가 번갈아가면서 실행되는 반면
1번은 fun A가 끝날때까지 fun B가 실행이 안될 줄 알았습니다.
하지만 결과는 1번, 2번 둘 다 번갈아가면서 실행이 되었습니다.
(물론 2번이 더 자주 서로 번갈아 실행되더군요)
물론 둘 다 별도의 코루틴 Scope를 지정하였기에 동시 실행이 보장된 것이다라고 이해는 되는데...
그럼 suspend function을 쓰고 안쓰고의 차이는 어디서 느낄 수 있는걸까요?