IT/Study

Blocking/NonBlocking과 Sync/Async

프티 2022. 5. 29. 21:37
반응형

개요

다른 관심사

Blocking/NonBlocking과 Sync/Async 두 그룹은 관심사가 다릅니다.

즉 동작은 비슷하지만 서로 관련이 없는 개념입니다.

Blocking/NonBlocking

Blocking/NonBlocking은 호출되는 함수가 바로 리턴하느냐 마느냐가 관심사다.

호출된 함수가 바로 리턴해서 호출한 함수에게 제어권을 넘겨주고, 호출한 함수가 다른 일을 할 수 있는 기회를 줄 수 있으면 NonBlocking입니다.

그렇지 않고 호출된 함수가 자신의 작업을 모두 마칠 때까지 호출한 함수에게 제어권을 넘겨주지 않고 대기하게 만든다면 Blocking입니다.

Synchronous/Asynchronous

Synchronous/Asynchronous는 호출되는 함수의 작업 완료 여부를 누가(호출한 함수 or 호출된 함수) 신경 쓰냐가 관심사다.

호출되는 함수에게 callback을 전달해서, 호출되는 함수의 작업이 완료되면 호출되는 함수가 전달받은 callback을 실행하고, 호출하는 함수는 작업 완료 여부를 신경쓰지 않으면 Asynchronous입니다.

호출하는 함수가 호출되는 함수의 작업 완료 후 리턴을 기다리거나, 또는 호출되는 함수로부터 바로 리턴 받더라도 작업 완료 여부를 호출하는 함수 스스로 계속 확인하며 신경쓰면 Synchronous입니다.

익숙한 것

Sync-Blocking

함수를 호출하면 제어권을 넘겨주고 호출된 함수가 리턴하기 전까지 대기, 호출된 함수가 리턴하면 다시 작업을 재개합니다.

Async-NonBlocking

함수를 호출해도 제어권을 넘겨주지 않아 작업을 멈추지 않고 계속할 수 있으며, 호출된 함수에게 콜백 함수를 넘겨주어 호출된 함수의 반환 값을 신경 쓰지 않습니다.

낯선 것

Sync-NonBlocking

앞에서 살펴본대로 조합해보면 NonBlocking-Sync는 호출되는 함수는 바로 리턴하고, 호출하는 함수는 작업 완료 여부를 신경 쓰는 것입니다. 신경 쓰는 방법이 기다리거나 물어보거나 두 가지가 있었는데, NonBlocking 함수를 호출했다면 사실 기다릴 필요는 없고 물어보는 일이 남습니다.

즉, NonBlocking 메서드 호출 후 바로 반환 받아서 다른 작업을 할 수 있게 되지만, 메서드 호출에 의해 수행되는 작업이 완료된 것은 아니며, 호출하는 메서드가 호출되는 메서드 쪽에 작업 완료 여부를 계속 문의합니다.

그림을 그려보면 다음과 같습니다.

Async-Blocking

앞에서 살펴본대로 조합해보면 Blocking-Async는 호출되는 함수가 바로 리턴하지 않고, 호출하는 함수는 작업 완료 여부를 신경 쓰지 않는 것입니다.

그림을 그려보면 다음과 같습니다.

참고하면 좋은 문헌

https://interconnection.tistory.com/141

반응형

'IT > Study' 카테고리의 다른 글

Status Code  (0) 2022.05.31
Firebase Authentication (with Google)  (0) 2022.05.30
Cross Browsing  (0) 2022.05.24
Renderer Process  (0) 2022.05.21
Redux 내부 구조  (0) 2022.01.29