Computer Science/Network

8.Blocking I/O, Non-Blocking I/O

성장에 몰입중인 개발자 2021. 9. 9. 16:22

  ∙Blocking I/O
   ∘Process(Thread)가 Kernel에게 I/O를 요청하는 함수를 호출하여 Kernel이 작업을 완료하면 결과를 
     반환 받음
            -I/O 작업이 진행되는 동안 user process(thread)는 자신의 작업을 중단한 채 대기한다.
            -Resource 낭비가 심하다.
            -여러 클라이언트가 접속하는 경우 클라이언트별로 thread를 생성해서 context switching이 
              증가한다.
  ∙Non-Blocking I/O
   ∘I/O 작업이 진행되는 동안 user process의 작업을 중단하지 않음
            ➀user process가 recvfrom 함수를 호출하여 커널에게 해당 socket의 data를 요청
            ➁커널은 곧바로 recvBuffer을 채우지는 못하고 EWOULDBLOCK을 return
            ➂user process는 다른 작업을 진행할 수 있음
            ➃revBuffer에 user가 요청한 데이터가 있는 경우에는 데이터를 복사하여 받아옴
            ➄recvfrom 함수가 data를 복사하여 data의 길이와 함께 반환
            -여러 클라이언트가 접속하는 경우 클라이언트별로 thread를 생성해서 context switching이 
              증가한다.
  ∙Asynchronous(비동기) I/O
   ∘I/O 처리가 완료되면 결과를 회신하여 I/O 작업이 진행되는 동안 user process의 작업을 중단하지 
     않음
            -내부에 큐를 생성하여 완료된 소켓의 정보를 담아 큐 하나만 확인한다.(중첩된 입출력)
            -사용자가 설정한 제한된 스레드를 사용하며 context switching을 줄인다.
  ∙IOCP(Input Output Completion Port)
   ∘중첩된 입출력을 지원하는 포트
            -중첩된 입출력을 사용해서 I/O를 비동기식으로 처리한다.
            -사용자가 설정한 제한된 스레드를 사용하며 context switching을 줄인다.

 

출처

링크