- 유저는 커널에게 read 작업 요청
- 데이터가 입력될 때까지 대기
- 데이터가 입력되면 유저에게 커널이 결과를 전달한다.
ex) 카카오톡이 사용자가 메시지를 전송할 떄까지 대기하는 것
- 유저가 커널에게 read 작업 요청
- 데이터가 입력됐든 안됐든 요청하는 그 순간, 바로 결과가 반환된다 (데이터가 없다면 없다는 결과 메시지 EWOULDBLOCK 반환)
- 입력 데이터가 있다면 1-2번 반복. (2번에서 결과 메시지를 받은 유저는 다른 작업을 진행한다)
- 입력 데이터가 있다면 커널이 유저에게 결과 전달한다.
이 경우 I/O의 진행시간과 관계없이 애플리케이션에서 작업을 오랜 시간 중지하지 않고 I/O 작업을 진행할 수 있다.
하지만 반복적으로 시스템 호출이 발생하기에 이역시 자원 낭비가 된다. (데이터를 입력할 때만 전송하는 게 아니라 주기적 반복)
"너 보낸 메시지 있니?" -> "없네" -> '잠시 이 사용자한테 공지 보내야겠다' -> "너 보낸 메시지 있니?" (반복)
Non-Blocking 문제인 반복적 시스템 콜 호출을 해결하기 위해 I/O 이벤트 통지 모델이 도입
동기 & 비동기는 정리한 부분이 많아서 스킵,