-
코루틴이란?
코루틴은 동시성 프로그래밍을 가능케 하도록 만든 개념입니다. 코루틴은 보통 스레드와 비교가 많이 됩니다. 코루틴은 나온지 꽤나 오래된 기술이나스레드가 나타나면서 방치가 되었었습니다. 이후 스레드의 자원 경쟁, 데드락 등의 문제로 인해 다시 주목받고 있습니다. 코루틴은 별도의 스레드 없이 메인 스레드 상에서 번갈아가며 병렬처리와 유사한 동작을 수행할 수 있기 때문입니다.
스레드와 차이점
스레드는 비동기로, 여러 스레드가 있다면 한꺼번에 동시에 실행되는 반면, 코루틴은 프로그램이 실행 중일 때 특정 시점에 코루틴으로 이동하고 그 전에 진행 중이던 루틴은 정지합니다. 즉, 한번에 하나의 코드만 실행됩니다. 이는 기존의 프로그래밍과 유사한 성격으로 보일 수 있습니다. 하지만 기존의 프로그래밍은 에러가 나지 않는 이상 실행 중인 코드를 빠져나올 수 있는 부분은 return과 같이 가장 마지막 부분이지만 코루틴은 실행 중간에 해당 함수를 빠져 나와 다른 코드를 실행할 수 있고 다시 실행 중이였던 코드 라인으로 이동할 수도 있습니다. 다시 말해서 코루틴은 yield 키워드로 실행을 중지할 수 있고 yield 키워드를 호출했던 곳으로 와서 실행을 재 시작합니다.
싱글코어에선 코루틴은 이동 시점이 더 잘 조절되고 context switching이 적어 성능면에서 멀티 스레드보다 좋을 수 있지만 멀티코어 프로세서를 활용할 수 없다는 문제점이 있으며 스레드보다 성능이 떨어지게 됩니다.