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

2.7 · 프로세스와 동시성

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

작업을 요청한 함수가 지금 돌아올 수 있느냐가 왜 중요할까요?

블로킹 호출은 조건이 충족될 때까지 현재 스레드를 돌려보내지 않습니다.

먼저 생활 비유

식당 앞에서 기다리기

자리가 날 때까지 입구에 서 있어야 하면 블로킹, 대기표를 받고 다른 곳에 갈 수 있으면 논블로킹에 가깝습니다.

컴퓨터 예제로 바꾸기

소켓에서 데이터 읽기

bytes = socket.read(buffer);

데이터가 없을 때 read가 멈춰 기다릴 수도 있고, “아직 없음”을 즉시 반환하게 설정할 수도 있습니다.

직접 움직여 보기1 / 5

지금 일어나는 변화

읽기 요청

스레드가 운영 체제에 데이터가 있는지 묻습니다.

실행권과 상태실행 · CPU 차례대기 · 메모리 · 운영 체제읽기 요청단계 1데이터 없음단계 2블로킹 대기단계 3논블로킹 반환단계 4준비 후 처리단계 5현재 스레드현재: 읽기 요청

이 그림에서 기억할 한 문장

블로킹은 현재 호출이 스레드를 붙잡는가, 논블로킹은 즉시 제어권을 돌려주는가의 차이입니다.

현재 상태

이동하는 것
현재 스레드
현재 위치
읽기 요청
다음 위치
데이터 없음

30초 확인 문제

논블로킹 read에 데이터가 없다면 보통 어떻게 할까요?

처음 보는 용어 두 개

블로킹
조건이 만족될 때까지 호출이 반환하지 않는 동작
논블로킹
진행 가능 여부와 함께 즉시 반환하는 동작

이 절을 다 읽었다면

블로킹은 현재 호출이 스레드를 붙잡는가, 논블로킹은 즉시 제어권을 돌려주는가의 차이입니다.

← 이전 절

2.6 동기와 비동기는 무엇이 다를까?

다음 절 →

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