동기야~!~!
이 개념을 잘 알고 있어야 추가적으로 GCD 관련된 개념들도 잘 이해할 수 있음 ..
Blocking VS Non-Blocking
Blocking
자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것
예를 들어서)
소깡이가 상사에게 서류를 전달하는 상황이라고 가정해보자.
이 때 이 상사의 이름이 blocking 이다. (블로킹 상사인 것.)
블로킹 상사의 경우,
> 서류를 제출하면, 그 앞에서 기다리라고 한다.
> 소깡이는 기다린다.
> 블로킹 상사가 서류를 모두 확인하면,
> 소깡이는 돌아가서 본인의 일을 한다.
Non-Blocking
다른 주체의 작업에 관련없이 자신의 작업을 하는 것
위의 예시와 같은 상황이라고 생각해보자.
이번에는 논블로킹 상사에게 서류를 전달한다고 가정해보면,
> 소깡이는 논블로킹 상사에게 서류를 제출한다.
> 논블로킹 상사는 읽어볼테니 돌아가라고한다.
> 소깡이는 돌아가서 본인의 일을 한다.
> 논블로킹 상사는 서류를 읽는다.
블로킹과 논블로킹의 차이는 다른 주체가 작업을 할 때 자신의 제어권이 있는지 없는지로 구분할 수 있다.
Synchronous
(= 동기)
작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작함을 의미
이번에는 싱크 상사라고 가정해보자.
> 서류를 싱크상사에게 제출한다.
> 싱크 상사는 블로킹/논블로킹 상사와 다르게 소깡이가 일을 하거나/기다리는 것에는 관심 X, 신경 쓰지 않는다.
> 싱크 상사가 서류를 다 읽고 전달해주면
> 소깡이는 서류를 받아서 바로 처리한다.
Asynchronous
(= 비동기)
시작, 종료가 일치하지 않으며 끝나는 동시에 시작을 하지 않음을 의미
어싱크 상사에게 서류를 주는 상황이라고 할 때,
> 어싱크 상사에게 서류를 전달하면,
> 어싱크 상사는 마찬가지로 블로킹/논블로킹 상사가 아니기에 소깡이가 어떤 일을 해도 상관이 없고, 싱크 상사가 일을 바로 처리하지 않아도 된다.
> 어싱크 상사가 서류를 다 읽고 나서 해야 할 일을 적어서 소깡이에게 전달한다.
> 소깡이는 이 내용을 확인하고 '언젠가'는 처리하게 된다.
동기와 비동기는 결과를 돌려주었을 때 순서와 결과에 관심이 있는지/없는지로 판단할 수 있다.
위의 4가지 개념을 서로 크로스오버하면 아래와 같은 표가 나오게 된다.
Blocking | Non-Blocking | |
Sync | Blocking-Sync | NonBlocking-Sync |
Async | Blocking-Async | NonBlocking-Async |
Blocking-Sync
블로킹? 다른 주체가 일을 할 때 나의 제어권이 없다.
동기? 다른 주체의 결과를 받자마자 나의 일을 한다.
예)
소깡이가 블로킹-싱크 상사에게 서류를 제출하면,
> 상사가 서류를 다 읽을 때까지 기다려야 하고, (= Blocking)
> 서류에 대한 결과를 받자마자 일을 한다. (= Sync)
어디에서 사용?
자바에서 입력요청을 할 때
NonBlocking-Sync
논블로킹? 다른 주체가 일을 할 때 나의 제어권이 있다. 내 할 일을 하면서 계속해서 결과를 물어본다.
동기? 다른 주체의 결과를 받자마자 나의 일을 한다.
예)
소깡이가 논블로킹-싱크 상사에게 서류를 제출하면,
> 상사가 서류를 제출하고 할 일을 하지만 중간 중간 끝났는지 확인하고, (= Non-Blocking)
> 서류에 대한 결과가 나오면 바로 일을 한다. (= Sync)
Non-Blocking/Sync는 Blocking/Sync와 큰 차이가 나지 않는다.
언제 사용?
게임에서 맵을 넘어갈 때, 해당 데이터를 가져올 때까지 정보의 로드율을 보여줘야 하는 경우
Blocking-Async
블로킹? 다른 주체가 일을 할 때 나의 제어권이 없다.
비동기? 다른 주체의 결과를 받고 언젠가 내 일을 한다.
🤔 이 경우는 비동기인데 블로킹으로 할 필요가 있나?
보통 Non-Blocking/Async로 하려다가 개발자의 실수로 이와 같은 상황이 나타나게 된다.
예)
소깡이가 블로킹-어싱크 상사에게 서류를 제출하면,
> 상사가 서류를 다 읽을 때까지 기다려야 하고, (= Blocking)
> 서류에 대한 결과가 나오면 언젠가 일을 한다. (= Async)
Nonblocking-Async
논블로킹? 다른 주체가 일을 할 때 나의 제어권이 있다. (= 내 일을 멈추지 않는다.)
비동기? 다른 주체의 결과를 받고 언젠가 내 일을 한다.
예)
소깡이가 블로킹-어싱크 상사에게 서류를 제출하면,
> 상사가 서류를 다 읽을 때 내 일을 할 수 있고, (= Non-Blocking)
> 서류에 대한 결과가 나오면 언젠가 일을 한다. (= Async)
🟢 언제 사용?
API 호출을 하고 다른 작업을 하다가 콜백을 통해서 추가적인 작업을 할 때
정리 !!
- 블로킹/논블로킹 : 제어의 관점
- 싱크/어싱크 : 순서와 결과(처리)의 관점
'OS' 카테고리의 다른 글
[운영체제] 시스템 구조 및 프로그램 실행 (1) | 2022.09.11 |
---|---|
[운영체제] 인터럽트 (0) | 2022.09.11 |
[질문] 프로세스 스케줄링 & CPU 스케줄링 (0) | 2022.09.05 |
CPU 스케줄링 (0) | 2022.09.05 |
프로세스 스케줄링 (0) | 2022.09.05 |