Event Loop Model

Tony·2023년 5월 10일


[ 해당 그림은 제 임의로 나타낸 Event Loop Model의 프로세스입니다. Event Loop Model의 구현체(RxJava, Node.js Engine)에 따라 프로세스는 바뀔 수 있습니다. ]

작동 원리

Event Loop Model은 Asynchronous Programming Model입니다. 메인 스레드는 block되지 않고 실행되며, asynchronous한 작업을 queueing하면 event Loop이 해당 작업들을 queue에서 pop하여 thread pool에 dispatch합니다.

I/O 작업과 같이 System Call이 필요한 작업의 경우, thread pool의 worker thread는 해당 작업을 kernel thread에 넘기고 자신은 thread pool에 되돌아갑니다. Kernel thread는 작업을 마치고, 작업의 완료를 event loop thread에 알립니다(interrupt). 이때, event loop은 해당 작업에 대한 callback 함수를 main thread에 넘겨서 처리하도록 할수도 있고, task queue에 넣어서 worker thread가 처리하도록 할수도 있습니다.(구현에 따라 다릅니다.)

중요한 점

중요한 점은, event loop model을 사용하면 적은 수의 스레드로 많은 양의 짧은 I/O를 처리할 수 있다는 점입니다. 만약 대부분의 I/O가 많은 시간을 소비한다면, 해당 모델을 사용하는 것을 고려해보아야할 것입니다.
또한, CPU 사용이 많은 작업이 많은 어플리케이션의 경우 event loop model을 사용하기 부적합할 수 있습니다.

이유?
event loop model은 multi-thread model보다 훨씬 적은 수의 스레드를 사용해서 이점을 얻기 위한 모델입니다. 만약, 시간이 긴 작업이 많은 경우 event loop model은 multi-thread model보다 빨리 스레드가 포화됩니다. 따라서 이때는 multi-thread model를 사용하는 것이 좋습니다.

0개의 댓글