새로운 내용을 공부할 때
새로운 내용의 공부를 시작할 때 용어의 정의를 이해하지 못하거나 정확하게 알지 못한다면 그 용어가 포함된 문장을 이해하지 못합니다.
작은 단어 하나가 내용을 이해하지 못하게 하기 때문에 용어를 정확하게 이해하는 것이 중요합니다.
TIL) 이벤트 루프
이벤트 루프는 프로세스나 스레드에서 서 발생되는 비동기 작업을 이벤트의 발생 , 감지 , 처리 단계로 관리하며, CPU 자원을 효율적으로 활용할 수 있도록 하는 매커니즘이다.
목차
이벤트 루프에 대해서 소개하며 어떤 이벤트 루프에 대해서 학습하는지 확인합니다.
- 자바스크립트
- 자바
- 운영체제
- 비교
구성 요소
이벤트 루프 매커니즘을 구현하기 위해서 필요한 구성 요소를 알고 있어야 합니다.
-
이벤트를 등록자
이벤트나 콜백을 등록하는 역할
- JS에서
setTimeout
,Promise
생성 - Linux에서
epoll_add
호출
- JS에서
-
백그라운드 작업 처리기 ( Web APIs, 시스템 콜)
타이머, 네트워스 요청 등 시간이 오래 걸리는 작업을 메인 쓰레드가 아닌 곳 처리해주는 역할
- JS의 Web APIs
- OS-level의 I/o
-
이벤트를 감시하는 역할
백그라운드 작업 완료 여부를 감시하고, 완료되면 이벤트(준비) 큐에 넣는 역할
epoll
,select
,poll
-
이벤트를 실행하는 역할
큐에 들어온 작업을 스택이 비었을 때 꺼내서 실행하는 역할
JS의 이벤트 루프,
worker Thread
전체 요약
이벤트 루프는 이벤트 등록 → 비동기 작업 실행 → 이벤트 감시 → 큐 처리 순서로 이루어집니다.
단일 쓰레드 환경에서도 높은 동시성을 가능하게 하는 핵심 구조입니다
비교하기
자바스크립트와 Redis는 모두 단일 스레드 기반의 이벤트 루프 구조를 갖지만, 목적과 실행 방식에는 차이가 있습니다.
자바스크립트 (특히 Node.js):
- Microtask Queue (예: Promise)와 Macrotask Queue (예: setTimeout)로 나뉜 여러 작업 큐를 관리합니다.
- 사용자 경험을 위해 우선순위 기반 스케줄링이 필요하며, UI 렌더링, 이벤트 처리 등 다양한 타입의 작업을 병렬적으로 다룹니다.
Redis:
- 단 하나의 명령 큐를 사용하여 클라이언트 요청을 직렬로 처리합니다.
epoll
을 활용한 I/O 멀티플렉싱으로 수천 개의 요청을 감시하고, 준비된 요청을 순차 실행합니다.- 사용자 인터페이스가 없고, 단순 명령 처리에 집중하므로 우선순위 스케줄링이 불필요합니다.
댓글남기기