⭐ Programming/Backend

Blocking/Non-Blocking 와 Sync/Async 와 Future/Completable Future

김 진 하 2023. 5. 7. 16:46

이 전까지 동기, 비동기는 그저 화면이 깜박이면서 새로 고침되느냐 안깜박이고 이벤트 탄 곳만 바뀌느냐 정도로 알고 있었다.ㅠㅠ

 

Blocking / Non-Blocking

: 다른 주체가 작업할 때 자신에게 제어권이 있는지?

* Blocking

: 호출된 함수A가 제어권을 갖고 자신의 작업이 끝날 때까지 넘기지 않음

-> A가 끝날 때까지 아무 것도 못하고 기다리고 있어야 함(기다릴게~빨리줘!)

* Non-Blocking

: 호출한 함수B에게 제어권을 넘기고 다른 일을 진행할 수 있게 함(callback)

-> A와 B는 각자 알아서 본인 작업을 수행함(내 할 일할게~너도 너 할일 해서 줘)

 

Sync / Async

: 결과를 받았을 때 순서와 결과에 관심이 있는지?

* Sync (동기)

: 호출된 함수와 호출한 함수가 수행 및 결과를 동시에 하거나 순차적으로 진행함

-> 결과가 완료되야 다른거 수행 가능~ 기다려줘ㅠㅠ

* Async (비동기)

: 호출한 함수B와 호출된 함수A는 별개로 동시에 진행 가능함

-> 완료전에 다른거 실행 가능~ 기다리지마!

Future/Completable Future

: 비동기를 처리하게끔 하는 객체

*Future

: 작업 자체를 블로킹해서 다른 작업 수행 불가

*Completable Future

: 결과에 대한 동기/비동기 제어권을 가지고 있어 다른 작업의 수행여부를 결정할 수 있음