# Blocking & Non-Blocking I/O (read()/write())

## Blocking Mode

read()/write() 시스템 콜은 파일의 끝에 도달했거나 요청한 크기만큼의 유효
데이터를 리턴할 수 있을 때까지 대기큐에 들어가 대기한다. 이는 busy-waiting 또는
polling 하면서 cpu 클럭을 낭비하지 않음을 의미한다. 비동기 이벤트로 작동하므로
최소한의 필요 연산만 수행한다.

여러 클라이언트를 리스닝해야 하는 서버같은 경우 클라이언트마다 리스닝할
스레드를 생성하므로 연산량 증가와 더불어 자원고갈을 유도하는 문제가 발생할 수
있다.

## Non-Blocking Mode

read()/write() 시스템 콜은 유효 데이터를 리턴할 수 없더라도 즉각적으로 caller
함수로 복귀한다. 리턴값은 0 또는 `-1(ERR_RETRY)`이다.
