blocking I/O랑 non-blocking I/O 보려다가 sync, async 보는 것 때문에 힘들었다....
내가 이해한 것은 이 본문의 내용인데 틀리면 피드백좀 받고 싶다.
결과적으로 말하면 blocking은 제어권의 개념, sync, async는 실행 순서의 개념이다.
우선 I/O에 대한 정의부터 살펴보자
정의 : I/O란 데이터의 입력(Input)과 출력(Output)을 함께 일컫는 말이다. 어떤 디바이스를 통해 입력과 출력이
이뤄지는 모든 작업을 I/O라고 한다. 그러므로 이를 효율적으로 실행하는게 성능의 극대화를 가져온다.
1. blocking I/O
I/O작업이 진행되는 동안 유저 프로세스가 자신의 작업을 중단한 채, I/O가 끝날 때까지 대기하는 방식을
의미한다.
다음 이미지를 보자
어플리케이션에서 Read()를 호출해 커널에 read I/O를 요청하면, read가 끝날 때까지 application은
block이 되어 다른 작업을 하지 못한다. 이는 read I/O가 수행될 때까지는 어플리케이션이 다른 작업을
수행하지 못한다는 것을 의미한다.
2. non - blocking I/O
I/O 작업을 호출했을 때 I/O 작업이 완됴될 때까지 A함수의 작업을 중단하지 않고 I/O 호출에 대해
즉시 리턴하고, A함수가 이어서 다른 일을 수행할 수 있도록 하는 방식을 의미한다.
다음 이미지를 보자.
application이 system call을 수행하면, 커널의 I/O작업 완료 여부와는 무관하게 즉시 응답한다.
이는 커널이 시스템 콜을 받자마자 CPU 제어권을 다시 어플리케이션에 넘겨주고, 따라서 어플리케이션은
I/O 작업이 완료되기 전에 다른 작업을 수행할 수 있다. 그리고 어플리케이션은 다른 작업들을 수행하다가
중간중간 시스템 콜을 보내서 I/O가 완료됐는지 커널에게 물어보고, 완료되면 I/O작업을 완료한다.
3. Sync, Async
간단하게 얘기하자면 Sync란 동기적으로 실행한다는 의미이다. 즉 A랑 B가 있으면 A실행 후에 B를 실행한다는
것이고 Async는 비동기적으로 실행한다는 의미이다. 즉 A랑 B랑 순서에 상관없이 실행한다는 의미이다.
여기서 문제는 block, non-block, async, sync에 대해서 짬뽕이 됐을 때다.
필자의 경우는 block이 sync고 non-block이 async랑 같은 의미 아니야?라고 생각했다.
우선 non-blocking, Async를 실행 예시를 보자.
1) blockSyn함수에서 동기적(Async)와 blocking이 일어난다고 가정하자.
그러면 A함수가 실행되면서 A에 대한 제어권은 function A()가 계속 가지고 있는 것이다. blockSyn함수에서는
A()실행에 대한 제어권이 없다. 하지만 동기적으로 실행되면 A()함수의 실행순서와 상관없이 B()함수는
실행된다.
→ 흔히 알고 있는 비동기적인 상황
2) blockSyn함수에서 동기적(sync)와 non-blocking이 일어난다고 가정하자.
그러면 A함수가 실행되면서 A에 대한 제어권은 function A()가 계속 가지고 있는 것이 아니라 blockSyn함수와
A()함수와 제어권이 번갈아가서 할당된다. 즉 A가 실행되면서 중간중간 blockSyn함수와 A함수의 상태를 지속적으로
체크하는 것이다. 함수의 실행 순서는 결국 sync이므로 A()가 결국 끝나야 B가 실행된다.
→ 흔히 알고 있는 동기적인 상황
'CS > 네트워크' 카테고리의 다른 글
[ Broadcast ] [ Broadband ], OSI 7계층 장비 (2) | 2024.07.23 |
---|---|
HTTP 구조 - [ Header ] [ Body ] (0) | 2024.06.29 |
IP 관련 개념 ☎ (0) | 2024.06.17 |
[ TCP/IP 4계층 ] vs [ OSI 7계층 ] Re (0) | 2024.06.17 |
HTTP, Socket, WebSocket (0) | 2024.06.17 |