[DEV] J-Jay

Blocking vs Non-Blocking 본문

Back-end/MSA

Blocking vs Non-Blocking

J-Jay 2024. 2. 26. 22:13
728x90

Blocking

Caller는 Callee가 완료될떄까지 대기한다.
제어권을 Callee가 가지고 있다.
Caller와 다른 별도의 Thread가 필요하지 않다(혹은 Thread를 추가로 쓸수도 있다)

A: Caller는 getResult가 결과를 돌려 주기 전까지 아무것도 할 수 없다.(동기 - Blocking)
B: Caller는 getResult가 결과를 구하고 callback을 실행하기 전까지 아무것도 할 수 없다. (비동기 - Blocking)
→ Caller는 getReulst가 완료 될 때까지 대기한다. (Blocking)
→ Caller를 호출한 후, Callee가 완료되기 전까지 caller는 아무것도 할수 없으며, 제어권을 Callee가 가지고 있다. 

 

Non-Blocking

 

Calleer는 Callee를 기다리지 않고 본인의 일을 한다.
제어권을 Caller가 가지고 있다.
Caller와 다른 별도의 Thread가 필요하다.

A: Caller는 getResult가 결과를 돌려 주기 전까지 아무것도 할 수 없다. (동기 - Blocking)
C: getResult 호출한 후, getResult가 완료되지 않더라도 Caller는 본인의 일을 한다. (동기 - Non-Blocking)
D: getResult를 호출환 후, getResult가 완료되지 않더라도 Caller는 본인의 일을 할 수 있으며,
    Caller는 Callee(getResult)의 결과에 관심이 없다.(비동기-Non-Blocking)

'Back-end > MSA' 카테고리의 다른 글

MSA 분해로 인해 생긴 문제 해결 방법  (0) 2024.04.25
MSA 분해로 생긴 문제들  (1) 2024.04.25
ExecutorService  (0) 2024.03.04
Future  (0) 2024.03.04
동기와 비동기  (0) 2023.05.14