Blocking과 Non-Blocking
처리되어야 하는 작업이 전체적인 작업 흐름을 막는 지에 대한 관점
블로킹(Blocking)
A 함수가 B 함수를 호출하면, 제어권을 A가 호출한 B 함수에 넘겨준다
- A함수가 B함수를 호출하면 B에게 제어권을 넘김
- 제어권을 넘겨받은 B는 함수를 실행, A는 B에게 제어권을 넘겨주었기 때문에 함수 실행을 잠시 멈춤
- B함수는 실행이 끝나면 자신을 호출한 A에게 제어권을 돌려줌
- 동기적인 작업을 수행할 때 발생
- 파일 시스템에서 파일을 읽거나 네트워크에서 데이터를 가져오는 작업을 수행할 때, 해당 작업이 완료될 때까지 다음 코드 실행을 멈춤
- 프로그램의 실행 흐름을 차단하고 다른 작업이 실행되지 못하게 할 수 있음
논 블로킹(Non-Blocking)
A함수가 B함수를 호출해도 제어권은 그대로 자신이 가지고 있는다
- A함수가 B함수를 호출하면 B 함수는 실행되지만, 제어권은 A 함수가 그대로 가지고 있음
- A함수는 계속 제어권을 가지고 있기 때문에 B함수를 호출한 이후에도 자신의 코드를 계속 실행
- 비동기적인 작업을 수행할때 발생
- 파일을 비동기적으로 읽거나 네트워크 요청을 비동기적으로 보내는 작업은해당 작업이 완료되지 않더라도 다음 코드가 실행됨
- 일반적으로 콜백 함수, Promise, async/await와 같은 메커니즘을 사용하여 처리됨
- 한 작업이 완료될 때까지 기다리지 않고도 다른 작업을 수행할 수 있음