Search
Duplicate

블로킹과 논블로킹

Created
2022/12/29 12:49
tags
🖥️CS
블로킹(Blocking) 그리고 논블로킹(Non-Blocking)은 동기, 비동기와 함께 나오는 용어 중 하나이다.
두 용어는 함수의 제어권한에 대한 차이가 있다. main() foo() 두 함수가 있다고 예를 들어보면,
블로킹은 main() 함수 안에서 foo() 함수를 호출하면 제어권한을 foo() 함수로 넘겨준다. 제어권한을 넘겨준 동안 main() 함수는 멈추고 foo() 함수 실행이 끝나고 제어권한이 돌아오면 다시 실행한다.
논블로킹은 함수를 호출해도 제어권한을 자기 자신이 가지고 있다. main() 함수 안에서 foo() 함수를 호출했더라고 main() 함수가 제어권한을 계속 가지고 있고 foo() 함수와 함께 실행된다.
동기(Sync)는 결과값을 받을 때까지 기다리고 비동기(Async)는 결과값을 받지 않아도 이후 단계를 실행한다.
그렇다고 무조건 논블로킹 == 비동기는 아니다 동기도 논블로킹처럼 작동시킬 수 있다.
제어권한은 main() 함수가 그대로 가지고 있고 결과값을 얻기 위해 실행 도중에 foo() 함수에 실행 완료 여부를 물어볼 수 있다.