논 블로킹 I/O 프로그래밍에서는 I/O를 요청하는 함수의 호출은 작업이 완료될 떄 까지 스레드의 실행을 차단한다.
다중커넥션을 위한 다중 스레드를 생각해보았을때, 스레드가 꽤 많은 시간 블로킹 된 다는 것을 알 수 있다.
장시간 실행 스레드를 가지게 됨으로써 cpu와 메모리를 낭비하게 된다.
시스템 호출은 데이터가 읽혀지거나 쓰여지기를 기다리지 않고, 항상 즉시 반환된다. 호출 순간에 사용 가능한 결과가 없는 경우, 함수는
미리 정의된 상수를 반환하여 그 순간에 사용 가능한 데이터가 없다는 것을 알린다.
논 블로킹 i/o의 가장 기본 적인 패턴은 실제 데이터가 반환될때까지 루프 내에서 리소스를 적극적으로 polling 하는 것이다. 이것은 바쁜
대기(busy-waiting)이라고 한다. 이를 통해 서로 다른 리소스를 같은 리소스 내에서 처리할 수 있지만, 사용하지 않는 리소스에 대해
엄청난 낭비를 초래한다. 폴링 알고리즘은 엄청난 cpu 낭비를 초래한다