본문 바로가기
Python

Python - 코루틴과 이벤트루프 이해 정리

by 올엠 2024. 3. 25.
반응형

코루틴이란!?

코루틴은 특정 함수의 루프등을 실행하다가 일시 정지하고 재개할 수 있는 구성 요소를 말한다.

쉽게 말해 필요에 따라 일시 정지할 수 있는 함수를 의미한다,.

코루틴을 사용하여 네트워크/디스크등 I/O 처리를 위해 대기하고 있을때, 이는 단순히 대기하는 작업을 기다리는 동안 다른 작업을 먼저 처리함으로써 CPU의 유휴 시간(Idle time)을 최소화 할 수 있기 때문 하나의 스레드안에서 최고의 효율을 끌어 낼 수 있다. 특히 파이썬은 GIL때문에 스레드하나를 동작할 때 효율을 극대화 할 수있게 된다.

코루틴을 얘기하면 이벤트루프(EventLoop)라는 용어가 함께 등장한다. 코루틴을 실제 관리하는 개념이 이벤트루프이다.

 

이벤트루프, EventLoop란?

이벤트루프는 코루틴을 하나의 테스크(task)라고 하면 이를 리스트로 등록하고 태스크를 관리하는 개념이다.

우리가 흔히 들어볼 수 있는 NGINX 의 이벤트루프 개념을 들어보았을 것이다. NGINX의 이벤트루프는 스레드를 활용하는 것이 아닌 바로 이 코루틴을 통해 테스크를 만들고 이벤트루프로 이를 효율적으로 처리하여 동시 작업 속도를 개선한 것이라 할 수 있다.

Boosting NGINX Performance 9x with Thread Pools

코루틴이 효율이 좋은 이유는 스레드 역시 프로세스보다는 적지만 스레드를 생성할 때에도, 스레드를 관리하기 위한 리소스를 사용해야 한다. 따라서 코루틴을 활용하게 되면 이러한 자원 낭비 없이 유휴 시간에 다른 코드를 실행하므로써 더 빠르게 동작을 할 수 있다.

코루틴은 즉 awaitable 하게 작성한 코드이며, 코루틴이란 용어는 코루틴 함수와 코루틴 객체로 아래와 같은 의미를 가진다.

코루틴 함수: async def 으로 정의한 함수

코루틴 객체: 코루틴 함수를 호출하고 반환되는 객체

그럼 파이썬에서 코루틴은 대표적으로 함수 앞에 붙는 async 키워드 이며, asyncio 를 통해 사용할 수 있다.

Python - asyncio 코루틴 await 이해하기 (asecurity.dev)

반응형