
개인 공부를 위한 Blocking과 Non-Blocking, Sync와 Async 정리
동기 방식에서는 한 작업이 끝날 때까지 다음 작업이 기다리는 방식이다. 즉, 작업이 직력적으로 처리된다.
예시 : A 함수가 B 함수를 호출할 때, B 함수의 결과를 A 함수가 처리함
비동기 방식에서 작업이 시작되면, 그 작업이 완료될 때까지 기다리지 않고 바로 다음 작업을 시작할 수 있다. 즉, 작업이 병렬적으로 처리된다.
예시 : A 함수가 B 함수를 호출할 때, B 함수의 결과를 B 함수가 처리함.
블로킹과 논블로킹은 호출된 함수의 제어권과 관련이 있다.
호출된 함수가 자신의 작업이 종료될 때까지 제어권을 가지고 있는 것이다. 호출된 함수의 작업이 종료될 때까지 호출하는 함수는 다른 작업을 진행할 수 없다.
예시 : A 함수가 B 함수를 호출할 때, B 함수가 자신의 작업이 종료되기 전까지 A 함수에게 제어권을 돌려주지 않는 것
논블로킹은 호출된 함수가 자신의 작업이 종료되지 않아도 함수의 제어권을 자신을 호출하는 함수로 바로 넘겨주는 것을 말한다.
예시 : A 함수가 B 함수를 호출할 때, B 함수가 다른 제어권을 얻고 A 함수는 본인의 제어권을 가지고 있으며 A 함수가 다른 일을 할 수 있도록 하는 것
Non-Blocking == Async인가요? NO❗️
Blocking / Non-blocking 과 Sync / Async 는 다른 개념이다.
Blocking/Non-Blocking의 경우 제어권을 가지는 것에 대해 관련이 있고, Sync/Async의 경우 호출된 함수의 종료를 처리하는 것에 대해 관련이 있다.
Blocking / Async 방식을 위 내용을 바탕으로 정리해보면 다음과 같다.
사실 Blocking/Async 의 경우는 일어날 일이 별로 존재하지 않기 때문에, 넘어가도 된다. 보통 Non-Blocking/Async를 목표로 하였지만 잘못 프로그래밍 하는 경우 발생한다고 한다.
Non-Blocking Sync 방식은 Blocking / Sync 모델과 차이가 없다.
위 내용을 바탕으로 정리해보면 이 모델은 다음과 같다.
이 방식은 정보를 받아올 동안 Progress를 보여줄 수 있는 Progress Bar를 사용할 때 사용할 수 있다.
Nonblocking/Blocking 개념은 생소하군요... 잘배우고갑니다! 히히