Skip to content
Discussion options

You must be logged in to vote

Blocking IO 란 ?

IO 프로세스가 시작한 작업이 진행되는 동안 다른 작업은 중단된 상태로 진행 중인 IO 작업이 끝날 때까지 대기하는 방식을 뜻한다.

  • Read() 작업이 끝날 때까지 다른 작업을 수행하지 못한다.
  • 단일 스레드의 경우, 입출력이 완료될 때까지 멈춰있는다.
  • 멀티 스레드의 환경에서는 IO 작업으로 실행 중인 스레드가 멈추게 되면, CPU는 문맥 교환을 통해 다른 스레드에게 CPU 자원을 할당시킨다. 이 과정에서 문맥 교환이 잦으므로 오버헤드가 발생하여 성능이 떨어지게 된다.

Non-Blocking IO 란 ?

한 프로세스가 IO 작업을 호출했을 때 IO 작업이 완료될 때까지 작업을 중단하지 않고 IO 호출에 대해 즉시 리턴한 뒤, 해당 프로세스가 이어서 다른 IO 작업을 수행할 수 있도록 하는 방식을 뜻한다.

  • Read() 함수가 호출이 되고 난 후에, 커널에서 바로 응답해주기 때문에 작업 제어권은 어플리케이션에 있는 상태이다. 따라서 다른 작업을 이어서 진행할 수 있다.
  • 해당 작업들을 수행하면서 중간 중간 작업이 완료가 되었는 지 확인하고 완료가 되었다면 정상적으로 완료시킨다.
  • 스레드는 중단 없이 계속 실행되기 때문에 문맥 교환이 필요하지 않다.

차이점 ?

  • 호출되는 IO 함수가 바로 리턴하여 제어권을 어플리케이션에 넘기느냐, 아니면 바로 리턴하지 않아 커널 쪽에서 제어권을 가지고 있느냐의 차이이다.

Replies: 1 comment

Comment options

You must be logged in to vote
0 replies
Answer selected by YuDeokRin
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
2 participants