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

2.8 · 프로세스와 동시성

높은 동시성의 서버는 어떻게 만들까?

연결 1만 개마다 스레드 하나를 두지 않고도 요청을 처리할 수 있을까요?

대부분의 연결은 계산보다 네트워크를 기다리는 시간이 길기 때문에 준비된 연결만 골라 처리할 수 있습니다.

먼저 생활 비유

카페의 진동벨

직원이 손님 한 명 옆에서 음료가 나올 때까지 기다리지 않고, 완성된 주문의 벨만 확인해 처리합니다.

컴퓨터 예제로 바꾸기

epoll 기반 서버

ready = epoll_wait(...);
for (fd of ready) handle(fd);

운영 체제가 준비된 소켓 목록만 돌려주므로 이벤트 루프는 빈 소켓을 하나씩 검사하지 않습니다.

직접 움직여 보기1 / 5

지금 일어나는 변화

많은 연결

대부분은 네트워크 데이터를 기다리는 중입니다.

실행권과 상태실행 · CPU 차례대기 · 메모리 · 운영 체제많은 연결단계 1관심 등록단계 2epoll단계 3완료 목록단계 4이벤트 루프단계 5준비된 요청현재: 많은 연결

이 그림에서 기억할 한 문장

높은 동시성은 많은 일을 동시에 계산하는 것보다 많은 기다림을 적은 실행 흐름으로 관리하는 기술입니다.

현재 상태

이동하는 것
준비된 요청
현재 위치
많은 연결
다음 위치
관심 등록

30초 확인 문제

이벤트 루프에서 한 핸들러가 오래 계산하면?

처음 보는 용어 두 개

입출력 다중화
여러 입출력 대상 중 준비된 것만 한 번에 통지받는 기술
이벤트 루프
준비된 이벤트를 꺼내 대응 함수를 반복 실행하는 구조

이 절을 다 읽었다면

높은 동시성은 많은 일을 동시에 계산하는 것보다 많은 기다림을 적은 실행 흐름으로 관리하는 기술입니다.

← 이전 절

2.7 블로킹과 논블로킹은 무엇이 다를까?

다음 절 →

2.9 코드와 데이터는 어떻게 컨테이너·가상 머신까지 이어질까?