일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- wecode
- westagram
- 스코프
- on_delete
- 자바스크립트
- 트랜잭션
- JWT
- rebase
- status code
- docker
- OSI7계층
- 장고초기세팅
- Django
- crud2
- async/await
- 노드
- 프로미스
- bcrypt
- 호이스팅
- javascript
- nodeJS
- CORS
- typescript
- pm2
- node
- manytomanyfield
- 실행 컨텍스트
- TypeError: this.boardRepository.createBoard is not a function
- Jest
- django westagram
- Today
- Total
될때까지
개념정리 :: 동기 vs 비동기? 블럭 vs 넌블럭? 본문
이 블로그에 정리되어있는 모든 개념들은 공부하면서 정리한 내용입니다.
잘못 기술한 부분이 있을 수 있으니 발견하시면 언제든지 지적해주세요😄
자바스크립트를 공부하다 보니까 자꾸 등장하던 동기, 비동기의 개념. 두루뭉술하게 얼추 씽크좀 맞춰라에서 쓰이는 것처럼 무언가를 맞추라는 뜻이겠거니 하고 넘어갔는데 CS지식을 쌓고자 여러 영상을 보던 도중에 또 동기, 비동기가 등장을 했다. 이참에 개념을 제대로 정리하고 넘어가야겠다 싶어서 오늘의 포스팅 토픽으로 정하게 되었다.
🔷 동기(Synchronous)와 비동기(Asynchronous)
함수의 작업 완료!!
1) 동기(Synchronous)
동기는 호출되는 함수의 작업 완료에 대해 신경이 씽키고(Synchronous) 순서에 맞게 처리하는 작업 방식이다. 해야하는 작업을 다른 쓰레드로 넘겼지만, 그 작업이 끝날 때 까지 기다렸다가 처리하는 순서를 말한다. 씽크를 맞춰라처럼 다른 두개를 맞추다의 뜻 개념에서 살펴보면, 요청과 결과를 동시에 맞춰라, 동시에 일어난다는 것을 의미한다. 요청->결과->요청->결과
2) 비동기(Asynchronous)
비동기는 호출되는 함수가 끝나든 안끝나든 신경이 안씽키고(Asynchronous) 순서에도 관심이 없는 작업 방식이다. 해야하는 작업을 다른 쓰레드로 넘겨서 분산을 시키고, 그 작업이 끝날때까지 기다리지 않고 처리하는 순서를 말한다. 씽크의 반대 뜻으로 생각을 하면, 요청과 결과가 일치하지 않는다는 것을 의미하겠다.
🔷 블럭(Blocking)과 넌블럭(Non-Blocking)
제어권 !!
1) 블럭(Blocking)
Block이라는 뜻이 막다!라는 뜻이다. 블럭과 넌블럭은 동기와 비동기의 기준은 다르기 때문에 같은 개념이 아니라는 걸 명심해야한다. 블럭과 넌블럭은 제어의 관점에서 바라보라고 한다. 즉, 블로킹은 제어권이 나한테 없어서 호출한 함수의 작업이 끝날 때 까지 막혀서 기다려야한다면 블로킹이다. 싫어요 나 내꺼 할꺼에요! 라는 제어권이 나한테 없다는 이야기다.
2)넌블럭(Non-Blocking)
Non-Blocking은 반대로 제어에 대한 주도권이 나한테 있어서 호출한 함수의 실행중이여도 상관없이 내가 해야하는 다른 작업을 수행하는 방식을 뜻한다.
🔷 동기/비동기와 블럭/넌블럭의 조합
1) 동기와 블로킹
2) 동기와 논블로킹
3) 비동기와 블로킹
4) 비동기와 논블로킹
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://learnjs.vlpt.us/async/
https://devwhkang.gatsbyjs.io/posts/async-sync-blocking-non-blocking/
'학습 > 개념정리' 카테고리의 다른 글
((Database)) Linux & Terminal (0) | 2022.06.28 |
---|---|
개념정리 :: DNS? (0) | 2022.06.17 |
개념정리 :: URI, URL, URN? (0) | 2022.05.25 |
개념정리 :: DOM과 렌더링이란? (0) | 2022.05.25 |
개념정리 :: 크로스 브라우징, Reset.css vs Normalize.css (0) | 2022.05.23 |