1.블로킹 & 논블로킹
소켓의 동작 방식은 입출력 과정에서 스레드가 차단되는지(blocked)의 여부에 따라
블로킹 모드와 논블로킹 모드로 구분됨
1-1. 블로킹, Blocking
블로킹은 요청한 작업이 성공하거나 에러가 발생하기 전까지 응답을 돌려주지 않는 것을 말함
하나의 스레드에서 하나의 클라이언트에 대한 입출력만 처리할 수 있었던 이유는 서버와 클라이언트가 각각 데이터를 송신, 수신을 기다리고만 있었기 때문
즉, 스레드가 입출력과 관련된 시스템 콜 함수(accept(), recv(), read(), write(), …)를 호출한 이후 응답이 오기까지 기다리면서 작업이 차단(blocked)되었던 것
따라서 다른 클라이언트의 입출력을 처리할 수 없게 됨

1-2. 논블로킹, Non-Blocking
블로킹 모드의 동작 방식으로 인해 블로킹 소켓을 사용한 서버는 충분히 많은 동시 접속 사용자를 수용하기 어렵다는 특성이 있음
이러한 단점을 개선한 방식이 논블로킹(Non-Blocking) 방식으로,
즉, 스레드가 입출력과 관련된 시스템 콜 함수(accept(), recv(), read(), write(), …) 자체는 여전히 차단되지만,
입출력 다중화 기술(IO Multiplexing)을 통해 시스템 콜 함수를 호출하기 전에 어떤 클라이언트에서 입출력이 준비가 되었는지 확인할 수 있기 때문에
특정 클라이언트의 입출력을 계속 기다리지 않고, 입출력이 준비된 클라이언트와 통신을 바로 수행할 수 있음

Last updated on