profile image

L o a d i n g . . .

Blocking/Non-blocking

Blocking

다른 서비스에 내용을 요청하게 되면, 그 요청이 끝날 때까지 나는 아무것도 하지 못하고 기다리는 상태. 
다른 서비스의 작업이 끝나야 나는 내 일을 할 수 있다.

예시)
1. 프린터에게 내가 쓴 문서를 인쇄하라고 요청함.
2. 프린터가 인쇄할동안 나는 아무것도 하지 않고 기다려야 함. 인쇄한 문서를 있어야 내 할 일을 할 수 있기 때문에.
3. 인쇄가 끝나면 난 내 할 일을 할 수 있음.


Non-Blocking

Non-blocking 으로 처리할 경우, 다른 서비스에 요청한 작업이 지금 어떻게 진행되고 있던 간에 상관없이 내 할 일을 할 수 있다.

예시)
1. 프린터에게 내가 쓴 문서를 인쇄하라고 요청함.
2. 프린터가 인쇄할동안 나는 내 다른 할 일(또 다른 문서 쓰기, 쓰레기통 비우기 등)을 할 수 있음. 


Blocking/Non-Blocking 정리

즉, 어떤 일을 누군가에게 요청한 후 결과를 기다리지 않고, 자신의 일을 수행할 수 있냐 없냐의 차이다.

다른 주체가 작업할 때 제어권이 있냐 없냐(여기서 제어권이란 내 일을 내 맘대로 수행할 수 있는 제어권)로,
제어권의 관점에서 바라보기도 한다.

다른 주체가 작업할 때 나에게 함수를 실행할 수 있는 제어권이 있으면 Non-blocking,
다른 주체가 작업할 때 나에게 함수를 실행할 수 있는 제어권이 없으면(다른 주체에게 제어권이 넘어감, 다른 주체의 작업이 끝나고 나에게 제어권이 넘어올 때까지 기다려야 함) Blocking.



Sync/Async(동기/비동기)

결과 처리의 관점.

Sync(동기)

동기적으로 처리할 경우, 다른 서비스에 요청한 작업이 끝남과 동시에 그 작업 결과를 가지고 내 일을 처리한다.

sync라는 의미가 번역을 하면 동시에 어떤 일을 한다는 의미이다. 
즉, 다른 주체(함수 등)에게 요청한 작업이 끝남과  동시에  내 작업 처리를 시작한다는 뜻이다.

예시)
1. 프린터에게 내가 쓴 문서를 인쇄하라고 요청함.
2. 프린터 인쇄가 끝남과 동시에 난 내 다음 할 일을 시작한다.
(난 프린터 인쇄가 언제 끝나나 계속 관심있게 보고 있다가, 인쇄물을 받자마자 내 할 일을 시작하는 것이다.)


Async(비동기)

비동기적으로 처리할 경우, 요청한 내용의 결과가 어떻게 되든 상관없이 요청만 해놓고 다른 일을 할 수 있다.
요청한 결과가 끝나도 바로 그 결과를 처리하지 않을 수 있다.

async라는 의미가 번역을 하면 sync와 반대로 동시에 어떤 일을 하지 않는다는 의미이다. 
즉, 다른 주체(함수 등)에게 요청한 작업이 어떻게 진행이 되든  상관없이  내 작업 처리를 한다는 뜻이다.

다른 주체(함수 등)에게 요청한 작업이 끝나도  내 작업 처리를 안할 수 있고, 할 수도 있고...
요청한 작업이 어떻게 되든 그 처리를 어떻게 할 지는 내 맘대로라는 것이다.

예시)
1. 프린터에게 내가 쓴 문서를 인쇄하라고 요청함.
2. 프린터 인쇄가 언제 끝나는 지 난 아무 관심도 없다.
언젠가는 그 인쇄물을 확인하여 내 할 일을 할 것이다.


Sync/Asyc 정리

즉, 요청한 작업 결과 처리를 어떻게 할 거냐의 차이다.

다른 주체의 작업이 완료됨과 동시에  내 작업을 처리하면  Sync,
다른 주체의 작업 완료와 내 작업 처리가 상관 없으면 Async



Blocking/Non-blocking, Sync/Async 4가지 조합

Blocking/Sync 는 요청한 작업이 실행되는 동안 다른 작업을 못하고 대기(Blocking), 요청한 작업이 끝남과 동시에 작업 시작(Sync)

Non-blocking/async 는 요청한 작업이 실행되는 동안 다른 작업 할 거 하고 있음(Non-blocking), 요청한 작업이 끝나도 내 작업 하던 거 있으면 계속 하다가 내 할 거 끝난 이후에 요청한 작업 결과 처리할 수 있음(async)

Blocking/sync, non-Blocking/async

 

Non-blocking/async 는 요청한 작업이 실행되는 동안 다른 작업 할 거 하고 있음(Non-blocking), 근데 요청한 작업이 끝남과 동시에 그 작업 결과를 가지고 작업 시작해야 함(Sync). 그래서 요청한 작업이 끝났는지 안끝났는지 계속 물어봄.

Non-blocking/sync

 

Blocking/Async는 요청한 작업이 실행되는 동안 다른 작업을 못하고 대기(Blocking). 근데 요청한 작업이 끝나도 요청한 작업 결과를 바로 처리하지 않고, 다른 작업 하거나 아무것도 안하거나 등을 할 수 있음. 언젠가는 요청한 작업의 결과 처리하겠지...(async)

(보통 코드 잘못 짤 경우 벌어지는 일이라고 함ㅋㅋ)

Blocking/async

 

 

참고 블로그 글

https://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/

https://junhyunny.github.io/information/java/asynchronous-and-non-blocking-process/

참고 영상

우아한 테코톡
https://www.youtube.com/watch?v=IdpkfygWIMk

복사했습니다!