새로운 내용을 공부할 때
새로운 내용의 공부를 시작할 때 용어의 정의를 이해하지 못하거나 정확하게 알지 못한다면 그 용어가 포함된 문장을 이해하지 못합니다.
작은 단어 하나가 내용을 이해하지 못하게 하기 때문에 용어를 정확하게 이해하는 것이 중요합니다.

1 분 소요

이벤트 루프는 프로세스나 스레드에서 서 발생되는 비동기 작업을 이벤트의 발생 , 감지 , 처리 단계로 관리하며, CPU 자원을 효율적으로 활용할 수 있도록 하는 매커니즘이다.

목차

이벤트 루프에 대해서 소개하며 어떤 이벤트 루프에 대해서 학습하는지 확인합니다.

  1. 자바스크립트
  2. 자바
  3. 운영체제
  4. 비교

구성 요소

이벤트 루프 매커니즘을 구현하기 위해서 필요한 구성 요소를 알고 있어야 합니다.

  1. 이벤트를 등록자

    이벤트나 콜백을 등록하는 역할

    • JS에서 setTimeout, Promise 생성
    • Linux에서 epoll_add 호출
  2. 백그라운드 작업 처리기 ( Web APIs, 시스템 콜)

    타이머, 네트워스 요청 등 시간이 오래 걸리는 작업을 메인 쓰레드가 아닌 곳 처리해주는 역할

    • JS의 Web APIs
    • OS-level의 I/o
  3. 이벤트를 감시하는 역할

    백그라운드 작업 완료 여부를 감시하고, 완료되면 이벤트(준비) 큐에 넣는 역할

    • epoll,select,poll
  4. 이벤트를 실행하는 역할

    큐에 들어온 작업을 스택이 비었을 때 꺼내서 실행하는 역할

    JS의 이벤트 루프, worker Thread

전체 요약

이벤트 루프는 이벤트 등록 → 비동기 작업 실행 → 이벤트 감시 → 큐 처리 순서로 이루어집니다.
단일 쓰레드 환경에서도 높은 동시성을 가능하게 하는 핵심 구조입니다

비교하기

자바스크립트와 Redis는 모두 단일 스레드 기반의 이벤트 루프 구조를 갖지만, 목적과 실행 방식에는 차이가 있습니다.

자바스크립트 (특히 Node.js):

  • Microtask Queue (예: Promise)와 Macrotask Queue (예: setTimeout)로 나뉜 여러 작업 큐를 관리합니다.
  • 사용자 경험을 위해 우선순위 기반 스케줄링이 필요하며, UI 렌더링, 이벤트 처리 등 다양한 타입의 작업을 병렬적으로 다룹니다.

Redis:

  • 단 하나의 명령 큐를 사용하여 클라이언트 요청을 직렬로 처리합니다.
  • epoll을 활용한 I/O 멀티플렉싱으로 수천 개의 요청을 감시하고, 준비된 요청을 순차 실행합니다.
  • 사용자 인터페이스가 없고, 단순 명령 처리에 집중하므로 우선순위 스케줄링이 불필요합니다.

댓글남기기