CS

Blocking, Non-Blocking I/O와 Asynchronous, synchronous I/O

겜도리도리 2023. 3. 18. 22:51
반응형

개요

Blocking I/O와 Non-Blocking I/O의 차이, Asynchronous I/O와, synchronous I/O의 차이점에 대해 설명한다.

예전부터 좀 헷갈리던 개념인데 차근차근 정리해보고자 한다.

Blocking I/O와 Non-blocking I/O

Blocking I/O : I/O 작업이 완료될 때까지 프로그램이 멈추고 대기하는 방식, 데이터 전송이 완료될 때까지 프로그램이 멈추기 때문에 다른 작업을 수행할 수 없음. I/O 작업이 오래 걸리는 경우 전체 시스템 성능이 저하될 수 있음.

Non-blocking I/O : I/O 작업이 완료되지 않았더라도 프로그램이 계속 실행되는 방식, I/O 작업이 완료되지 않았더라도 다른 작업을 수행할 수 있으므로, 여러 작업을 동시에 처리할 수 있음.

Synchronous I/O와 Asynchronous I/O

Synchronous I/O : I/O 요청을 보내면 해당 요청이 완료될 때까지 대기함. I/O 작업이 완료되면 그 결과를 반환함. I/O 작업이 끝날 때까지 대기해야 하므로 다른 작업을 처리할 수 없는 '블로킹' 상태에 빠지는 단점 존재

Asynchronous I/O는 I/O 요청을 보낸 후, 해당 요청이 완료될 때까지 대기하지 않고 다른 작업을 수행할 수 있음. I/O 작업이 완료되면 이벤트를 발생시켜 알리고, 이벤트 핸들러가 그 결과를 처리하므로 여러 작업을 동시에 처리할 수 있음. 그러나 구현이 복잡하고, 이벤트 핸들러가 I/O 작업 완료를 기다리며 자원을 소비하기 때문에, I/O 처리에 대한 오버헤드가 존재할 수 있음.

 

그렇다면 Blocking I/O와 Synchronous I/O가 서로 비슷해보일 수 있는데 동작 방식에 있어서 차이점이 있다고 한다.

 

Non-Blocking I/O와 Asynchronous I/O

Non-blocking I/O는 I/O 작업이 수행되는 동안 다른 작업을 수행할 수 있도록 I/O 함수를 호출한 즉시 제어권을 반환한다. 이후에 I/O 작업의 완료 여부를 지속적으로 체크하면서 결과를 얻는 방식이다. I/O 작업이 완료될 때까지 기다리는 대신 다른 작업을 수행할 수 있도록 비차단적으로 I/O 작업을 처리한다.

 


Asynchronous I/O는 I/O 작업을 요청한 후에도 I/O 완료 여부와 관계없이 다른 작업을 수행할 수 있도록 하는 방식으로, I/O 작업이 완료되면 알림을 받아서 결과를 처리한다. 비차단적으로 I/O 작업을 처리하는 Non-blocking I/O와 달리 완전히 비동기적으로 I/O 작업을 처리함. 이 방식은 I/O 작업의 완료 여부를 체크하지 않아도 되므로, Non-blocking I/O보다 더 효율적으로 I/O 작업을 처리할 수 있다.

 

반응형

'CS' 카테고리의 다른 글

면접 대비... (작성 중)  (0) 2023.03.20
Hash Table  (1) 2022.03.04
컴파일 4단계  (0) 2022.01.14
[디자인 패턴] MVC 패턴  (0) 2021.12.28
[CS] OSI 7 Layer  (0) 2021.12.16