블로킹(Blocking)이란?
위 사진 처럼 블로킹의 경우 A에서 B함수를 호출 할 때 제어권을 A가 B에게 넘겨준다. 그렇게 되면 A의 경우에는 제어권을 돌려받기 전까지는 실행을 멈추게 된다. 즉 자신의 작업을 진행하다 다른 주체의 작업이 시작되면 자신의 작업을 멈추고 해당 작업을 기다렸다가 다시 자신의 작업을 시작한다.
ex)
function start() { console.log("완료"); } console.log("시작"); start(); console.log("다음 작업"); /* 결과 시작 -> 완료 -> 다음작업 */
논블로킹(Non-blocking)이란?
위의 사진처럼 A가 B를 호출하더라도 제어권을 그대로 A가 가지고 있기 때문에 B를 호출한 이후에도 A의 코드를 계속 실행된다. 즉 다른 주체의 작업에 관련 없이 자신의 작업을 하는 것을 의미한다.
ex)
function start() { console.log("완료"); } console.log("시작"); setTimeout(start,0); console.log("다음 작업"); /* 결과 시작 -> 다음작업 -> 완료 */
동기/비동기 + 블로킹/논블로킹의 조합 종류
- Sync Blocking(동기 + 블로킹)
- Async Blocking(비동기 + 블로킹)
- Sync Non-Blocking(동기 + 논블로킹)
- Async Non-Blocking(비동기 + 논블로킹)
Sync Blocking(동기 + 블로킹)
- 다른 작업이 진행되는 동안 자신의 작업을 처리하지 않고(블로킹)
다른 작업의 완료 여부를 받아 순차적으로 처리하는(동기) 방식으로
다른 작업의 결과가 자신의 작업에 영향을 주는 경우에 활용할 수 있다.- 자주 쓰이는 조합 중 하나이다.
- 모든 실행과 흐름이 순차적이기 때문에 개발자가 프로그램을 제어하기 쉽다.
- 상위 프로세스는 하위 프로세스의 작업 완료 여부를 신경쓴다.
Async Blocking(비동기 + 블로킹)
- 다른 작업이 진행되는 동안 자신의 작업을 멈추고 기다리는(블로킹)과 다른 작업의 결과를 바로 처리하지 않아 순서대로 작업을 수행하지 않는(비동기)방식이다.
- 상위 프로세스는 하위 프로세스의 작업 여부를 신경쓰지 않는다.
- 블로킹 방식이므로 하위 프로세스의 작업이 완료되지 않으면 상위 프로세스는 다른 작업을 할 수 없다.
- sync-blocking과 성능의 차이가 거의 없기 때문에 실무에서 잘 사용하지 않는다.
Sync Non-Blocking(동기 + 논블로킹)
- 다른 작업이 진행되는 동안에도 자신의 작업을 처리하고(논블로킹)
다른 작업의 결과를 바로 처리하여 작업을 순차대로 수행하는(동기) 방식이다.- 상위 프로세스는 하위 프로세스의 작업 완료 여부를 신경쓴다.
- 논블로킹 방식이므로 하위 프로세스는 작업 완료 여부와 상관 없이 상위 프로세스는 다른 작업을 할 수 있다.
Async Non-Blocking(비동기 + 논블로킹)
- 다른 작업이 진행 되는 동안에도 자신의 작업을 처리하고(논블로킹)
다른 작업의 결과를 바로 처리하지 않아 작업 순서가 지켜지지 않는(비동기)- 자주 사용하는 조합중 하나이다.
- 성능과 자원의 효울면에서 가장 우수하다.
- 상위 프로세스는 하위프로세스의 작업 완료 여부를 신경쓰지 않는다.
- 논블로킹 방식이므로 하위 프로세스의 작업 완료 여부와 상관 없이 상위 프로세스는 다른 작업을 할 수 있다.
블로킹과 논블로킹의 차이
블로킹과 논블로킹의 차이 는 제어권의 주체에 있다.
- 블로킹 : 제어권을 넘기고 제어권 다시 돌려 받을 때까지 기다렸다가 돌려 받고 동작을 시작한다.
- 논블로킹 : 제어권을 넘기지 않고 동작을 한다.
🙇 참고 사이트 🙇
https://jaehoney.tistory.com/242 https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC#%EB%8F%99%EA%B8%B0synchronous_/_%EB%B9%84%EB%8F%99%EA%B8%B0asynchronous https://tang25.tistory.com/entry/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B3%BC%ED%95%99-CS%EB%8F%99%EA%B8%B0%EC%99%80-%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9-%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9