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 |