동기/비동기 블로킹/논블로킹

이원찬·2024년 7월 13일
0

Web

목록 보기
3/7
post-thumbnail

블로킹 vs 논블로킹 🤔

블로킹 (Blocking)

자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날때 까지 기다렸다가 자신의 작업을 시작하는것

기다렸다가!

기다리는 동안 다른작업은 진행 할 수 없음

논 블로킹 (Non-Blocking)

자신의 작업을 진행하다가 다른 주체의 작업에 완료를 기다리지 않고 계속 작업을 진행하는것!

기다리지 않고 본인의 작업을 계속 진행한다!

블로킹, 논-블로킹의 기준

다른 주체가 작업할때 자신의 제어권이 있는지 없는지로 볼 수 있다.

제어권 ? 🤔

제어권은 자신(함수)의 코드를 실행할 권리 같은 것으로

제어권을 가진 함수는 자신의 코드를 끝까지 실행한 후, 자신을 호출한 함수에게 돌려준다.

다른 함수를 호출 했을 때 제어권이 다른 함수에게 있다면 블로킹! 본인에게 있다면 논-블로킹이 되겠다!

동기 vs 비동기

동기 (synchronous)

작업을 하나씩 처리하는 방식을 말한다.

하나의 작업이 끝나야 다음 작업이 시작될수 있다!

비동기 (asynchronous)

여러 작업을 동시에 처리하는 방식으로 하나의 작업이 진행되는 동안 다른 작업도 함께 진행 될수 있다.

자주 사용되는 3가지 조합

1️⃣ 동기 and 블로킹

다른 작업을 요청했다가 그 요청이 끝나면 다음 작업을 이어서 한다!

ex) 💁‍♂️

JavaScrip 에서 propmt 로 사용자의 입력을 기다릴때

<div
  onClick={() => {
    let s = prompt("입력하세요");
    console.log(s);
  }}
>

위와 같은경우 사용자의 입력을 기다려야지만 다음 console.log 동작을 실행하게 된다.

2️⃣ 동기 and 논-블로킹

다른 작업을 호출한뒤 본인의 작업을 진행 할순있지만 다른 작업이 끝날때 까지 기다리는것이다.

ex) 💁‍♂️

사용자에게 현재 진행상황이 어느정도 되었는지 알려주는 ProgressBar을 만들때 유용하게 사용할것이다.

오래걸리는 작업을 요청한후 다른작업을 하지 않고 오래걸리는 작업이 끝나길 기다리는 상황에 progressbar를 보여주곤 한다.

3️⃣ 비동기 and 논-블로킹

다른 작업을 요청한후 결과를 기다리지 않고 바로 다른 작업을 실행하는 경우이다.

ex) 💁‍♂️

Javascrip의 API 호출 코드 등에서 많이 사용된다.

API 호출시 API 호출의 응답을 기다리는게 아닌 응답이 왔을때 알아서 다른 작업이 호출되게 callback 함수를 넣어주기 때문이다.

axios({
  method: "GET",
  url: "https://localhost:8080/todos",
}).then((response) => {
  console.log(response.data);
})

console.log("hi"); // axios 코드가 실행되도 이 console.log는 실ㅎ

참고자료

https://www.youtube.com/watch?v=oEIoqGd-Sns

https://velog.io/@nittre/블로킹-Vs.-논블로킹-동기-Vs.-비동기

profile
소통과 기록이 무기(Weapon)인 개발자

0개의 댓글