상세 컨텐츠

본문 제목

[매일메일] 어떤 이유로 코루틴을 사용한 작업 처리가 기존 스레드 방식보다 가벼운 지 설명해주세요

본문

일단 스레드의 메모리 구조를 찾아보면

이런 식으로 생겼다.

 

여기서 프로세스 내에서 각각 Stack만 할당 받고 Code, Data, Heap 영역은 공유된다.

 

코루틴에 대해서 알고 있는 부분은 코루틴은 실행을 위해 있으며 단순한 객체의 느낌이다.

실제 사용에서도 asyncio 라이브러리의 create_task()를 통하여 생성하며, 해당 내부에 여러가지 비동기 함수를 넣을 수 있다.

이런 식의 여러 코루틴 객체를 만들고 서로 일시 중단 지점 등을 활용하여 실행 가능하다.

 

따라서 여러 개의 코루틴도 하나의 스레드 내에서 사용 가능하다.

 

따라서 이를 생성 및 관리할 때에도 스레드의 경우는 운영체제에 시스템 호출이 필요하며, 커널 수준의 리소스가 할당된다.

하지만 코루틴은 단순 객체와 유사하며, 운영체제 리소스를 사용하지 않는다.

 

스위칭 비용 또한 코루틴은 운영체제의 개입 없이 실행 지점과 로컬 변수 상태만 heap 메모리에 저장하고 사용하게 된다.

관련글 더보기