다른 함수를 호출함과 동시에 제어권을 넘겨주는것을 말한다
제어권이 넘어갔기 때문에 호출 이후 자신의 코드는 제어권을 다시 받기 전까지 실행하지 않는다
다른 함수를 호출했지만 제어권은 바로 다시 가져오는것을 말한다
제어권을 여전히 소유하고있기 때문에, 호출된 함수는 호출된 함수대로 돌아가며 제어권을 다시 받은 함수도 실행된다
함수 A가 끝난 다음 함수 B가 실행된다
시작과 끝이 하나라도 같다면 동기라고 보는 관점도 있다
제어권의 반환과 결과값의 전달에 시간을 맞추는 것
함수 A와 함수 B의 시간이 맞지 않을때
결과값이 전달되는 시간과 제어권의 반환이 같지 않을 때
블록킹은 제어권을 호출한 함수가 가지고 있다가 결과값 반환할 때 같이 준다
동기는 제어권을 반환하는 시간과 결과값을 전달하는 시간이 같다
그렇다면 블로킹은 동기와 같은말인것이 아닐까?
하지만 보는 관점이 다르다
블록은 제어에 관한 이야기이고, 동기는 제어권을 반환하는 시간(타이밍)에 관한 이야기다
다른 작업이 시작되는 동안 동작하지 않는다(블로킹)
결과를 반환한다면 해당 업무를 바로 처리한다(동기)
동작 과정
A함수가 B함수를 호출하며 제어권을 B함수에게 넘겨줌
B함수가 실행되며 A함수는 제어권을 잃었기에 기다림
B함수가 종료되면 결과와 제어권을 A함수에게 돌려주며, A함수가 실행
다른 작업이 시작되는 동안 자신이 제어권을 가지고 실행한다(논블로킹)
결과를 반환한다면 해당 업무를 바로 처리한다(동기)
결과값에 함수의 완료된 상태 뿐만 아니라 완료되지 않음이라는 상태도 결과값으로 본다
동작 과정
A함수가 B함수를 호출하였지만 제어권은 A가 가지고 있음
B함수는 실행되며, A함수는 제어권을 여전히 가지고 있었기에 실행이됨
A함수는 실행중 B함수에게 결과값이 나왔는지 꾸준히 요청을 보냄
B함수의 작업이 끝나서 결과를 받을 수 있다면, 해당 결과를 가지고 업무를 수행
다른 작업이 시작되는 동안 동작하지 않는다(블로킹)
결과를 반환받더라도 해당 업무를 바로 처리하지 않아도 된다(비동기)
동작 과정
A함수가 B함수를 호출하며 제어권을 B함수에게 넘겨줌
B함수가 실행되며 A함수는 제어권을 잃었기에 기다림
B함수가 종료되면 결과와 제어권을 A함수에게 돌려주었지만, 곧바로 결과를 처리하지 않고 자신의 일이 끝나고 난다면 처리
다른 작업이 시작되는 동안 자신이 제어권을 가지고 실행한다(논블로킹)
결과를 반환받더라도 해당 업무를 바로 처리하지 않아도 된다(비동기)
동작 과정
A함수가 B함수를 호출하였지만 제어권은 A가 가지고 있음
B함수는 실행되며, A함수는 제어권을 여전히 가지고 있었기에 실행이됨
A함수는 실행중 B함수에게 결과값이 나왔는지 꾸준히 요청을 보냄
B함수의 작업이 끝나서 결과를 받을 수 있다면, 곧바로 결과를 처리하지 않고 자신의 일이 끝나고 난다면 처리