Blocking I/O & Non-Blocking I/O

김민성·2023년 3월 9일
0

Network

목록 보기
10/10

Blocking I/O

  1. Process(Thread)가 Kernel에게 I/O를 요청하는 함수 호출
  2. Kernel이 작업을 완료하면 작업 결과 반환

특징

  • I/O 작업이 진행되는 동안 user Process(Thread)는 자신의 작업을 중단한 채 대기
  • Resource 낭비가 심함 (I/O 작업이 CPU 자원을 거의 쓰지 않으므로)

여러 클라이언트가 접속하는 서버를 Blocking 방식으로 구현
-> I/O 작업을 진행하는 동안 작업 중지
-> 다른 클라이언트가 진행중인 작업을 중지하면 안되므로 클라이언트 별로 별도의 Thread 생성
-> 접속자 수가 매우 많아짐
-> 많아진 Thread로 인해 Context Switching 횟수 증가
-> 비효율적

Non-Blocking I/O

  1. User Process가 recvform 함수 호출(커널에게 해당 소켓으로부터 data를 받고 싶다고 요청)
  2. 커널은 이 요청에 대해 바로 recvBuffer를 채워서 보내지 못하므로 "EWOULDBLOKC"을 return
  3. Blocking 방식과 달리 User Process는 다른 작업 진행 가능
  4. recvBuffer에 user가 받을 수 있는 데이터가 있는 경우, Buffer로부터 데이터를 복사하여 받아옴
    -> recvBuffer는 Kernel이 가지고 있는 메모리에 적재되어 있으므로, Memory간 복사로 인해 I/O보다 훨씬 빠른 속도로 data를 받아올 수 있음
  5. recvform 함수는 빠른 속도로 data를 복사한 후 복사한 data의 길이와 함께 반환

0개의 댓글