serversim
학습시뮬레이터템플릿가격
…
…
메뉴 열기
학습↗시뮬레이터↗템플릿↗가격↗
내 Documents문서
전체 목차/6장/6.438 / 40

6.4 · 입출력과 장치

select·poll·epoll은 여러 연결을 어떻게 다룰까?

소켓 1만 개 중 데이터가 온 12개만 어떻게 찾을까요?

입출력 다중화는 여러 파일 서술자의 준비 상태를 커널이 추적하고 준비된 대상을 한 번에 알려주는 기술입니다.

먼저 생활 비유

손님 1만 명의 진동벨

직원이 모든 테이블을 돌며 묻지 않고 울린 벨 목록만 받아 완성된 주문을 전달합니다.

컴퓨터 예제로 바꾸기

epoll 이벤트 루프

events = epoll_wait(epfd, ...);
for (e of events) handle(e.fd);

관심 소켓을 미리 등록하고 epoll_wait에서 준비된 이벤트 묶음을 받습니다.

직접 움직여 보기1 / 5

지금 일어나는 변화

많은 fd 등록

읽기·쓰기 준비 상태를 관심 목록에 넣습니다.

CPU · 커널 · 장치사용자 코드 · CPU운영 체제 · 커널장치 · 네트워크 · 디스크많은 fd 등록단계 1커널 대기단계 2장치 상태 변화단계 3준비 목록단계 4핸들러 실행단계 5ready fd현재: 많은 fd 등록

이 그림에서 기억할 한 문장

입출력 다중화는 여러 작업을 동시에 계산하는 기술이 아니라 여러 기다림 중 끝난 것을 효율적으로 찾는 기술입니다.

현재 상태

이동하는 것
ready fd
현재 위치
많은 fd 등록
다음 위치
커널 대기

30초 확인 문제

epoll의 주된 이점은?

처음 보는 용어 두 개

select·poll
fd 집합을 전달해 준비 상태를 확인하는 전통적 다중화 API
epoll
관심 대상을 커널에 등록하고 준비 이벤트를 받는 Linux API

이 절을 다 읽었다면

입출력 다중화는 여러 작업을 동시에 계산하는 기술이 아니라 여러 기다림 중 끝난 것을 효율적으로 찾는 기술입니다.

← 이전 절

6.3 read 함수로 파일을 읽으면 내부에서 무슨 일이 생길까?

다음 절 →

6.5 mmap은 어떻게 파일을 메모리처럼 보이게 할까?