본문 바로가기
CS

Blocking I/O 와 Non Blocking I/O | 동기(Synchronous)와 비동기(Asynchronous)

by Ahngyuho 2023. 7. 21.

프로그래밍에 대해 공부할 때 동기 비동기, Blocking I/O Non Blocking I/O 에 대해 만나는 경우가 많은 거 같습니다.

헷갈리고 어려운 개념이라 이번에 포스팅 해보며 확실하게 공부해보려고 합니다.

그리고 동기 비동기, Blocking I/O Non Blocking I/O 을 서로 같은 개념으로 알고 있는 경우가 많고 저 또한 그랬었기 때문에 이번엔 이 두 가지 개념에 대해서 살펴보는 글을 작성해 보려고 합니다.

 

Blocking I/O 과 Non Blocking I/O

Blocking I/O 와 Non Blocking I/O 는 시스템에서 입/출력(I/O) 작업을 처리하는 방법과 관련된 개념입니다.

 

Blocking I/O

프로그래머가 짠 코드에서 I/O(file 에서 데이터를 읽어오거나 쓰려는 경우, DB 에서 데이터를 조회 / 수정 / 삭제 / 삽입 하려는 경우) 작업을 실행하는 메서드를 사용하는 경우, 그 I/O 작업이 끝나기 전까지 스레드는 실행을 멈추고 대기하는 I/O 를 Blocking I/O 라고 합니다.

 

Non Blocking I/O

마찬가지로 스레드가 I/O 작업을 실행하는 코드를 만나는 경우, 이번에는 그 I/O 작업의 종료를 기다리지 않고 즉시 다른 코드를 실행할 수 있는 I/O 작업을 Non Blocking I/O라고 합니다. 

 

이렇듯 Blocking I/O 와 Non Blocking I/O는 실행 중인 시스템에서 I/O 작업을 실행하는 경우의 처리 방식을 나타내는 개념이라고 생각하시면 될 것 같습니다.

 

 

동기(Synchronous)와 비동기(Asynchronous)

동기 비동기는 작업(메서드 등) 실행 순서에 관한 개념입니다. 

 

동기(Synchronous)

동기(Synchronous)는 메서드 같은 작업들이 호출된 순서에 맞게 실행되고 종료되는 것을 말합니다. 해당 작업이 끝나기 전에는 다음 작업을 시작할 수 없고, 현재의 작업이 모두 종료된 후에 다음 작업을 실행하기 때문에 실행 순서와 종료 순서가 메서드 작성 순서와 동일합니다.

 

 

실행 순서와 종료 순서는 다음과 같습니다.

동기(Synchronous)는 코드 단에서의 작업 순서와 실제 실행 순서가 동일한 것을 의미합니다. 

 

 

비동기(Asynchronous)

비동기(Asynchronous)는 작업 실행이 각각 독립적인 것을 뜻합니다.

 

각각의 작업이 독립적으로 실행되므로 실행 순서 종료 순서를 예측하기 힘듭니다. 

 

정리

이번에는 Blocking I/O Non Blocking I/O , 동기(Synchronous) 비동기(Asynchronous) 가 서로 어떤 개념인지 살펴보았고, 

어떤 방식으로 실행되는지 알아보았습니다.