멘티 질문
블로킹 - 운영체제에서 인터럽트발생 했을때 쓰레드가 기다리는 것처럼 아무런 동작 못함(시스템콜)
동기 - 작업1⇒작업2순으로 진행될때 작업1이 완료되야지만 작업2를 시작함.
동기도 결국 작업1(인터럽트)가 완료되야 작업2가 실행되니, 차이가 없어보이는데 단어를 명확히 구분짓는 이유를 잘 모르겠습니다!
멘토 답변
동기는 여러개의 작업이 주어졌을때 완료 여부에 집중한 개념입니다.
블로킹은 다른 요청을 처리하기위해 현재 작업을 멈춰버리느냐, 즉 제어권의 개념입니다.
A,B,C함수가 실행된다고하면, A함수가 시작되고 종료되고 B함수가 시작되고 종료되고 C함수가 시작되고 종료되는 이 "흐름"에 집중하면 동기라고 얘기합니다.
반면에 블로킹은 아래와 같은 자바스크립트 코드가 있다면요.
function getPerson() { const name = getName(); const age = getAge(); const hobby = getHobby(); }
getPerson함수가 콜스택에서 실행이 됩니다.
제어권은 현재 getPerson함수가 가지고 있습니다.
어플리케이션이 코드를 읽어내려가게되면 getName함수가 실행이 됩니다.
그럼 이 제어권이 getName함수로 넘어갑니다.
이때 getPerson함수는 아무런 행동을 하지못하겠죠? getAge함수를 실행한다거나 hobby라는 변수를 메모리에 할당할수없습니다.
getPerson입장에서는 block된겁니다. 제어권을 상실했습니다.
getName함수가 실행이되고나면 리턴된 값이 name변수에 할당되겠죠?
이때 제어권은 다시 getPerson함수로 넘어옵니다. 그리고 제어권을 가진 getPerson함수가 다음 코드를 실행해나갑니다.
그리고 getAge와 getHobby또한 같은 동작을 수행합니다.
이 둘은 어떠한 현상을 바라볼때 관점의 차이라고 볼수있습니다.
그래서 동기이면서도 블로킹일수가 있고 그렇지 않을수도 있습니다.
이론적인 개념이라서 구분이 어려울수도있습니다. 이해가 가지않더라도 나중에 다시보고 또 나중에 다시보면 채워진 지식들로인해 이해가 가기도 합니다.