blocking I/O

 

  • blocking I/O는 I/O 함수를 호출했을 때 커널에서 I/O 작업이 완료될 때까지 호출자가 blocking 상태가 되는 I/O를 말합니다.




non-blocking I/O

 

  • non-blocking I/O는 I/O 함수를 호출했을 때 커널에게 I/O 작업을 요청한 후 호출자가 blocking 상태가 되지 않고 다음 작업을 처리할 수 있는 I/O를 말합니다.




synchronous( 동기 )

 

 

  • synchronous는 여러 작업들을 처리함에 있어서 순차적으로 하나씩 처리하는 것을 synchronus라고 합니다.




asynchronus( 비동기 )

 

  • asynchronous는 여러 작업들을 처리함에 있어서 순서와 작업 완료 여부 상관없이 독립적으로 동시에 처리하는 것을 asynchronous라고 합니다.

 

  • asynchronous는 작업을 커널이나 다른 쓰레드에 요청한 후 다음 작업을 처리하고 요청한 작업이 완료되었을 때 noti를 받거나 또는 콜백 함수가 호출되도록 합니다.




asynchronous 구현 방법

 

1. 싱글 쓰레드 환경에서 non-blocking I/O를 활용하여 작업을 처리하는 asynchronous 기법

 




2. 멀티 쓰레드 환경에서 각각의 쓰레드가 작업을 처리하는 asynchronous 기법

 




3. 멀티 쓰레드 환경에서 각각의 쓰레드가 non-blocking I/O를 활용하여 작업을 처리하는 asynchronous 기법

 




4. blocking I/O를 다른 쓰레드에서 처리하게 요청한 후 noti를 받거나 callback을 통해 처리

 




asynchronous 개념에서 주의할 점

 

  • asynchronous는 non-blocking I/O와 개념이 비슷하지만 다릅니다. non-blocking I/O는 asynchronous 프로그래밍을 구현하는 기법 중 하나로서 단순히 I/O 작업을 수행할 때 block되지 않고 return 되는 I/O를 말합니다. 하지만, asynchronous는 작업의 순서 및 완료 여부에 상관없이 커널이나 다른 쓰레드에 작업 요청 후 자신의 다음 작업을 처리하며 이후 커널이나 다른 쓰레드에서 요청했던 작업이 완료되었을 때 완료 noti를 받거나 callback 함수가 호출되도록 하는 것을 말합니다.

 

  • asynchronous 프로그래밍은 멀티 쓰레딩 프로그래밍이 아닙니다. 여러 작업을 동시에 실행하는 프로그래밍 방법론입니다. multithreading은 asynchronous programming을 사용할 수 있는 기법 중 하나입니다.




'개발 상식' 카테고리의 다른 글

정규 표현식( regular expression ) 간단한 사용법  (0) 2023.01.06
URL 문법  (0) 2022.12.26
디지털 이미지 파일 포맷에 관하여  (0) 2022.12.09
URI, URL, URN 이란?  (1) 2022.10.29
절대경로와 상대경로란?  (0) 2022.10.28

+ Recent posts