될때까지

개념정리 :: 동기 vs 비동기? 블럭 vs 넌블럭? 본문

학습/개념정리

개념정리 :: 동기 vs 비동기? 블럭 vs 넌블럭?

랖니 2022. 5. 28. 11:45
728x90
이 블로그에 정리되어있는 모든 개념들은 공부하면서 정리한 내용입니다.
잘못 기술한 부분이 있을 수 있으니 발견하시면 언제든지 지적해주세요😄

 

자바스크립트를 공부하다 보니까 자꾸 등장하던 동기, 비동기의 개념. 두루뭉술하게 얼추 씽크좀 맞춰라에서 쓰이는 것처럼 무언가를 맞추라는 뜻이겠거니 하고 넘어갔는데 CS지식을 쌓고자 여러 영상을 보던 도중에 또 동기, 비동기가 등장을 했다. 이참에 개념을 제대로 정리하고 넘어가야겠다 싶어서 오늘의 포스팅 토픽으로 정하게 되었다.

 

🔷 동기(Synchronous)와 비동기(Asynchronous) 

함수의 작업 완료!!

1) 동기(Synchronous)

동기는 호출되는 함수의 작업 완료에 대해 신경이 씽키고(Synchronous) 순서에 맞게 처리하는 작업 방식이다. 해야하는 작업을 다른 쓰레드로 넘겼지만, 그 작업이 끝날 때 까지 기다렸다가 처리하는 순서를 말한다. 씽크를 맞춰라처럼 다른 두개를 맞추다의 뜻 개념에서 살펴보면, 요청과 결과를 동시에 맞춰라, 동시에 일어난다는 것을 의미한다. 요청->결과->요청->결과

2) 비동기(Asynchronous) 

비동기는 호출되는 함수가 끝나든 안끝나든 신경이 안씽키고(Asynchronous) 순서에도 관심이 없는 작업 방식이다. 해야하는 작업을 다른 쓰레드로 넘겨서 분산을 시키고, 그 작업이 끝날때까지 기다리지 않고 처리하는 순서를 말한다. 씽크의 반대 뜻으로 생각을 하면, 요청과 결과가 일치하지 않는다는 것을 의미하겠다.

출처 : https://learnjs.vlpt.us/async/

 

 

🔷 블럭(Blocking)과 넌블럭(Non-Blocking)

제어권 !!

1) 블럭(Blocking)

Block이라는 뜻이 막다!라는 뜻이다. 블럭과 넌블럭은 동기와 비동기의 기준은 다르기 때문에 같은 개념이 아니라는 걸 명심해야한다. 블럭과 넌블럭은 제어의 관점에서 바라보라고 한다. 즉, 블로킹은 제어권이 나한테 없어서 호출한 함수의 작업이 끝날 때 까지 막혀서 기다려야한다면 블로킹이다. 싫어요 나 내꺼 할꺼에요! 라는 제어권이 나한테 없다는 이야기다.

출처 : https://devwhkang.gatsbyjs.io/posts/async-sync-blocking-non-blocking/

2)넌블럭(Non-Blocking)

Non-Blocking은 반대로 제어에 대한 주도권이 나한테 있어서 호출한 함수의 실행중이여도 상관없이 내가 해야하는 다른 작업을 수행하는 방식을 뜻한다.

출처 : https://devwhkang.gatsbyjs.io/posts/async-sync-blocking-non-blocking/

 

🔷 동기/비동기와 블럭/넌블럭의 조합

1) 동기와 블로킹

출처 : https://devwhkang.gatsbyjs.io/posts/async-sync-blocking-non-blocking/

 

2) 동기와 논블로킹

출처 : https://devwhkang.gatsbyjs.io/posts/async-sync-blocking-non-blocking/

3) 비동기와 블로킹

출처 : https://devwhkang.gatsbyjs.io/posts/async-sync-blocking-non-blocking/

4) 비동기와 논블로킹

출처 : https://devwhkang.gatsbyjs.io/posts/async-sync-blocking-non-blocking/

  Blocking Non-Blocking
Sync 제어 주도권이 나한테 없기 때문에 기다려야한다. 결과도 중요하기 때문에 해당 작업이 끝나고 결과를 받으면, 해당 업무를 바로 처리해야한다. 제어 주도권이 나한테 있기 때문에 작업이 끝날 때 까지 기다리지 않고 본인의 작업을 진행한다. 결과는 중요하기 때문에 작업이 끝났는지 계속 관심을 가지고, 작업이 끝났다면 가서 결과를 받아와 해당 업무를 바로 처리한다.
Async 제어 주도권이 나한테 없기 때문에 기다려야한다. 하지만 결과가 중요하지 않기 때문에 관심이 없는 상태다. 그래서 해당 작업이 끝났다고 결과값을 받아도 내 작업부터 진행한다. 제어 주도권이 나한테 있기 때문에 작업이 끝날 때 까지 기다리지 않고 본인의 작업을 진행한다. 결과가 중요하지 않기 때문에 해당 작업이 끝나도 바로 처리하지 않고 내 작업이 끝나면 그때서야 처리한다.

 

 

* 참고한 자료 * 

https://www.youtube.com/watch?v=U42qWURR6Gw 

https://www.youtube.com/watch?v=m0icCqHY39U&t=519s

https://www.youtube.com/watch?v=zRJOte7TaPw

https://www.youtube.com/watch?v=OITMfwqmUNY 

https://www.youtube.com/watch?v=sN4E9_u7xQk 

https://www.youtube.com/watch?v=oEIoqGd-Sns&t=262s 

https://www.youtube.com/watch?v=EJNBLD3X2yg 

https://musma.github.io/2019/04/17/blocking-and-synchronous.html

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

https://learnjs.vlpt.us/async/

https://devwhkang.gatsbyjs.io/posts/async-sync-blocking-non-blocking/

728x90