I/O 작업은 user space에서 직접 수행할 수 없기 때문에 user process가 kernel에 I/O 작업을 요청하고 응답을 받는 구조이다.
응답을 어떤 순서로 받는지, 어떤 타이밍에 받는지에 따라 여러 모델로 분류되는 것이다.
동기 프로그래밍과 비동기 프로그래밍?
동기 작업이란 한 번에 하나씩 수행되는 것을 의미한다.
즉, 해당 작업이 끝나기 전까지는 현재 진행중인 작업 외의 다른 작업을 수행하지 못함을 의미한다.
(HTTP 요청은 요청을 하면 무조건 응답을 받는다. 이것이 동기적이라고 할 수 있다.)
다른 말로는 모든 I/O 요청-응답 작업이 일련의 순서를 따르는 것이다. 즉, 작업의 순서가 보장된다.
비동기 작업이란 한 번에 하나 이상이 수행될 수 있음을 의미한다.
즉, 현재 작업을 진행중이더라도 다른 작업을 수행할 수 있다. 또한 작업에 대한 결과를 바로 원하지 않는다.
(내가 이메일을 보내는 작업은 상대방이 바로 답장하기를 원해서 보내는 작업은 아니다.)
블로킹과 논-블로킹?
블로킹은 자신이 waiting(blocking)된 것을 의미한다.
thread가 blocking이 된다는 것은 cpu가 점유되어 실행되지 못함을 의미한다.
논블로킹은 블로킹의 반대로, wait하지 않고 그냥 수행된다.
자신이 호출되었을 때, 다시 말해서 system call을 받았을 때 제어권을 바로 자신을 호출한 쪽으로 넘기며
자신을 호출한 쪽에서 다른 작업을 할 수 있도록 하는 것을 의미한다.
자신은 그대로 작업을 이어 나간다. thread가 waiting 하지 않으므로 cpu 제어는 그대로이다.
'~2023.02 > 1일 1CS지식' 카테고리의 다른 글
컴파일러와 인터프리터의 차이는 무엇일까? (0) | 2022.07.18 |
---|---|
DNS와 DHCP란? (0) | 2022.07.16 |
대표적인 SQL의 종류 3가지와 종류별 명령어는? (0) | 2022.07.14 |
http의 문제점은 무엇일까? (0) | 2022.07.13 |
AVL 트리란? (0) | 2022.07.12 |