← 질문 목록
#210깊이 0
블로킹과 논블로킹 I/O의 결정적 차이는 무엇인가?
제어권의 반환 시점이다. 블로킹은 작업 완료까지 기다리며, 논블로킹은 호출 즉시 제어권을 돌려준다.
| 순서 | 블로킹 호출자 | 논블로킹 호출자 |
|---|---|---|
| 1 | 읽기를 부른다 | 읽기를 부른다 |
| 2 | 아무것도 하지 않습니다 | EAGAIN으로 바로 돌아온다 |
| 3 | 아무것도 하지 않습니다 | 다른 일을 한다 |
| 4 | 데이터를 받는다 | 데이터를 받는다 |
블로킹 호출자는 읽기가 끝날 때까지 다음 일을 시작하지 못한다. 코드는 직관적이지만 그동안 스레드가 아무것도 못 한다.
논블로킹은 대기 시간 동안 다른 일을 할 수 있다. 대신 작업 완료 여부를 계속 확인하거나 알림을 받아야 하므로 로직이 복잡해진다.
동기·비동기는 작업 완료를 누가 어떻게 알리는지의 구분이다. 블로킹·논블로킹과는 축이 다르다.