ABOUT ME

-

Graduate of Computer Engineering at Inha University

https://github.com/juwon0605

devprofessionalism@gmail.com
  • 8.Blocking I/O, Non-Blocking I/O
    Computer Science/Network 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을 줄인다.

     

    출처

    링크

    댓글

Designed by Tistory.