-
Blocking & Non-Blocking 그리고 Sync & AsyncCS/OS 2022. 3. 5. 15:33728x90
Blocking & Non-Blocking
제어할 수 없는 대상의 처리 방법이다. (ex: IO, 멀티쓰레드 동기화)
여기서 키워드는 #제어권의 반환에 대한 관점이다.
Blocking
자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것
Blocking/Async 예를 들어, c언어의 제어권을 가진 main 함수에서 a라는 함수를 호출 했을 때 a라는 함수가 main 함수로부터 제어권을 받게되고, main 함수는 block 상태에 빠진다. a라는 함수를 실행하고 리턴값과 함께 제어권을 다시 main함수에게 반환을 하면 그때 main함수는 block 상태에서 빠져나오게 된다.
Non-Blocking
다른 주체의 작업에 관련없이 자신의 작업을 하는 것
Non-Blocking/Sync 예를 들어, blocking과 마찬가지로 main 함수에서 a라는 함수를 호출 했을 때 a라는 함수가 main 함수로부터 제어권을 받는다. 하지만 제어권을 리턴값을 반환할 때 함께 반환되지 않고 그 즉시 제어권을 다시 뱉어내고, 함수 a는 다른 스레드를 분할해서 다른 제어권을 별도로 갖던지해서 따로 실행이 된다. 여기서 main 함수는 a함수가 리턴값을 반환할 때까지 기다리지 않고 그 아래 코드를 실행한다.
Synchronous & Asynchronous
Sync(함께) + Chrono(시간) -> 어떤 대상들의 시간과 결과가 일치하는지에 대한 관점
여기서 키워드는 #시간의 일치에 대한 관점이다.
Synchronous
끝나는 동시에 시작함을 의미 (시간을 맞추는 것)
1.
---------함수 A---------> ---------함수 B--------->
함수 A의 작업이 끝나고 다음 함수가 실행되는 것 (시작과 끝의 시간을 일치시킴)
2.
---------제어권 반환--------->
---------결과값 전달--------->
제어권의 반환과 결과값의 전달의 시간을 맞추는 것
Asynchronous
시작, 종료가 일치하지 않으며, 끝나는 동시에 시작을 하지 않음을 의미(시간을 맞추지 않음)
1.
---------함수 A--------->
------함수 B----->
함수 A의 작업과 상관 없이 다음 함수가 실행되는 것 (시작과 끝의 시간을 일치하지 않음)
2.
-----제어권 반환----->
---------결과값 전달--------->
결과값의 반환과 제어권의 반환이 일치하지 않는 것
Blocking & Non-Blocking & Sync & Async의 4가지 조합
Block Non-Block Sync Read/Write Read/Write(Polling) Async I/O Multiplexing(Select / Poll) Asynchronous I/O Blocking/Sync
다른 작업이 시작되는 동안 동작하지 않으며, 결과를 반환하면 해당 작업을 바로 처리함
Blocking/Async
다른 작업이 시작되는 동안 동작하지 않으며, 결과를 반환하면 다시 작업을 시작하는데 반환된 결과에 대한 작업을 바로 처리하지 않아도 됨
Non-Blocking/Sync
다른 작업이 있어도 자신의 제어권을 가지고 자신의 일을 하면서 중간중간 계속 일이 끝났는지 확인함(context switching 발생) 결과를 반환하면 해당 작업을 바로 처리함
Non-Blocking/Async
메인과 호출된 함수가 각자 작업을 처리하다가, 호출된 함수가 작업이 끝나서 결과를 반환해도 메인 함수가 그 결과를 바로 처리하지 않고 자신의 일이 끝나면 처리하는 것
정리
- Blocking과 Non-Blocking은 제어의 관점, Sync와 Async는 결과와 순서의 관점을 갖는다.
참고
[10분 테코톡] 🎧 우의 Block vs Non-Block & Sync vs Async
[10분 테코톡] 🐰 멍토의 Blocking vs Non-Blocking, Sync vs Async
728x90'CS > OS' 카테고리의 다른 글
macOS shell을 bash에서 ZSH로 바꾸기 (0) 2022.04.11 가상메모리 (0) 2022.03.20 Process & Thread (0) 2022.03.04 OS 운영체제: 스케줄링(Scheduling) (0) 2022.02.27