Study Programming

Blocking, Non-blocking, Sync, Async

네모메모 2022. 8. 15. 21:55
반응형

 

Blocking vs NonBlocking : 딴 일하고 와도 돼?

 

차이점 : 호출된 함수가 바로 리턴(제어권 넘기)하느냐 마느냐

 

NonBlocking : 응 제어권 줄께, 너 딴 일하고 와

    호출된 함수가 바로 리턴해 제어권을 넘겨서 호출한 함수는 자기 할 일 한다.

 

Blocking  : 안돼 끝날 때까지 넌 여기서 기다려

     호출된 함수가 자신의 작업을 모두 마칠 때까지 호출한 함수에게 제어권을 넘겨주지 않고  

    호출한 함수가 다른 일 못하고 대기하게 한다.

 

 

 


Synchronous vs Asynchronous : 작업완료를 어떻게 알래?

차이점 : 호출한 함수가 '호출된 함수의 완료 여부'를 신경쓰냐

 

Async (Asynchronous, 비동기, 비동기화) : 너가 끝나고 연락해!

    호출된 함수에게 callback을 전달 후 호출한 함수는 자기 할 일 한다.

    호출되는 함수의 작업이 완료되면 호출된 함수가 전달받은 callback을 실행하므로

    => 호출하는 함수는 작업 완료 여부를 신경쓰지 않는다.

 

Sync (= Synchronous, 동기, 동기화)  : 내가 기다릴께 or 언제끝나?

    호출한 함수가

        #1) 호출된 함수의 작업 완료 리턴을 대기(+blocking)

            또는

        #2) 바로 리턴 받더라도 호출한 함수는 자기 할 일하면서 완료 여부를 계속 체크(+non-blocking)

    => 호출하는 함수는작업 완료 여부를 신경쓴다.

 

 


 

A가 B를 호출한다고 가정하고 시계방향 순으로 생각해봄

 

 

1) 동기 블러킹(Sync + Blocking)

    : B가 작업을 완료하고 결과를 돌려줄 때까지 A는 망부석마냥 오매불망 대기할 것

 

2) 동기 논블러킹(Sync + Non-blocking)

    : B에게 리턴받았지만 A는 딴 일하면서 B에게 계속 연락해 완료여부 체크할 것

 

3) 비동기 블러킹 (Async + Blocking)

    : A는 A대로 대기하고, B는 끝나면 (A가 넘겨준) 콜백 함수를 실행하고 완료하는 바로 앞에 있는데 전화거는 기분...;;

 

4) 비동기 논블러킹(Async + Non-blocking) << 가장 비동기적인 방식

    :  A는 딴 일할 거고 B는 끝나면 (A가 넘겨준) 콜백 함수를 실행하고 완료하는 아름다운 각자도생의 길 

 

 

 

 

 

 

 


[출처]

https://developer.ibm.com/articles/l-async/

https://baek-kim-dev.site/38

https://wbluke.tistory.com/49

https://jh-7.tistory.com/25

 https://wbluke.tistory.com/49 

 

 

 

 

반응형