Block
호출된 함수가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지고서 호출한 함수에게 바로 제어권을 리턴하지않는다.
(호출된 함수가 수행을 마칠동안 블록된다.)
Non-Block
호출된 함수가 자신이 할 일을 마치지 않았더라도 바로 제어권을 리턴하여 호출한 함수가 다른일을 진행할 수 있도록한다.
(수행을 마치든 아니든 블록되지 않는다.)
| 정리해보면서 블로킹/논블로킹은 제어권을 리턴하느냐와 관련있다고 느낌!
두 가지 개념의 차이는 관심사 측 어디에 초점을 두느냐의 차이.
동기(Synchronous)와 비동기(Asynchronous)는 작업의 완료에 초점을 두고 있다.
하나의 쓰레드가 다른 쓰레드의 작업 종료일 경우에 작업 시작하면 동기
하나의 쓰레드가 작업이 완료 되던지 말던지 신경쓰지 않고 다른 쓰레드에서 작업 시작을 할 수 있으면 비동기
반면에 블로킹(Blocking)과 논블로킹(NonBlocking)은 호출되는 제어권 리턴되는 시점에 초점을 두고 있다.
호출된 함수가 바로 리턴하지 않고, 제어권을 가지고 있으면서 해당 함수가 종료될 때 제어권을 넘긴다면 블로킹
호출된 함수가 완료되지 않아도 제어권을 바로 호출한 함수에게 넘긴다면 논블로킹