일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 카카오페이지클론
- web3.js
- 정보처리기사실기
- 블록체인
- 이더리움
- ERC-721
- npm
- ETH
- 정보처리기사
- ERC721
- 카카오홈페이지클론
- blockchain
- 클레이튼
- it5
- Non-Blocking
- 콜백함수this
- github
- 노마드코더
- Klaytn
- 노개북
- node.js
- git
- React
- 솔리디티
- solidity
- 2021정보처리기사실기
- it5분잡학사전
- 페이지클론
- 정보처리기사실기요약
- 비트코인
- Today
- Total
Be lazy, Be crazy
sync vs async? blocking vs non-blocking? 본문
📍동기와 비동기
- '호출되는 함수의 작업 완료 여부를 누가 신경 쓰냐'가 관심사
동기(Synchronous)
- 호출되는 함수의 작업 완료 여부를 누가 신경 쓰냐? -> 호출한 함수가!
- 호출되는 함수의 작업 완료 여부를 호출하는 함수가 스스로 확인합니다.
비동기(Asynchronous)
- 호출되는 함수의 작업 완료 여부를 누가 신경 쓰냐? -> 호출된 함수가!
- 호출된 함수에서 작업을 완료한 후 콜백함수를 실행하게 해 호출되는 함수의 작업 완료 여부를 확인하여 호출하는 함수가 신경쓰지 않게 합니다.
📍블로킹과 논블로킹
- '호출되는 함수가 제어권을 바로 리턴하느냐 마느냐', '리턴에 대한 제어권을 누가 가지고 있느냐'가 관심사
블로킹(Blocking)
- 호출되는 함수가 제어권을 바로 리턴하느냐 마느냐? -> 제어권 바로 리턴하지 않음
- 리턴에 대한 제어권을 누가 가지고 있느냐? -> 호출된 함수가 계속!
- 호출된 함수가 자신의 작업을 모두 완료할 때까지 호출한 함수에게 제어권을 넘겨주지 않고 가지는 방식
논블로킹(Non-blocking)
- 호출되는 함수가 제어권을 바로 리턴하느냐 마느냐? -> 제어권 바로 리턴함
- 리턴에 대한 제어권을 누가 가지고 있느냐? -> 호출된 함수가 호출한 함수에게 바로 넘겨줌!
- 호출된 함수가 바로 호출한 함수에게 제어권을 넘겨주고 호출한 함수가 다른 일을 할 수 있도록 하는 방식
글로만 보면 헷갈리죠?
헷갈릴 수 있는 4가지 개념을
이해하기 쉽게 크로스해서 살펴봅시다!
호출한 함수(파란색 화살표)와 호출된 함수(초록색 화살표)의 역할에 대하여 비교를 해보겠습니다
Blocking (블로킹) | Non Blocking (논블로킹) | |
Synchronous (동기) |
호출한 함수 - 호출된 함수의 작업이 끝나서 제어권이 다시 넘어올 때 까지 대기함 (다른 일 못함) - 블로킹 특징 - 호출된 함수의 작업 완료 여부를 신경씀 - 동기 특징 (아무 일도 안하면서, 완료됐는지만 바라보고있음) 호출된 함수 - 리턴 제어권 계속 가짐 (자신의 작업을 모두 완료할 때까지 호출한 함수에게 제어권을 넘겨주지 않음) - 블로킹 특징 결론: 호출된 함수가 작업 끝날 때까지 지켜보다가 작업 끝나는거 확인되면 다음 작업하는 호출한 함수 |
호출한 함수 - 호출된 함수가 제어권을 바로 다시 호출한 함수에게 넘겨줌 (다른 일 할 수 있음) - 호출된 함수의 작업완료 여부를 신경씀 - 동기 특징 (다른 일하지만, 주기적으로 완료했는지 체크함) 호출된 함수 리턴 제어권 호출한 함수에게 바로 넘겨줌(제어권 넘겨주고 지 할 일 함) - 논블로킹 특징 결론: 호출된 함수에게 제어권을 주면서 일 시키고 바로 제어권 돌려받고 또 다른 함수에게 또 제어권 주며 일 시키고 제어권 돌려받는 걸 반복하는 호출한 함수. 그러면서 호출된 함수가 완료되었는지 주기적으로 체크하는 호출한 함수(미완이면 다음 주기에 또 물어봄). 요청이 끝난 타이밍에 정확히 확인하기는 힘들겠죠? |
Asynchronous (비동기) |
호출한 함수 - 호출된 함수의 작업이 끝나서 제어권이 다시 넘어올 때 까지 대기함 (다른 일 못함) - 블로킹 특징 - 호출된 함수의 작업완료 여부를 신경쓰지 않음 (호출된 함수가 콜백함수를 통해 스스로 작업 완료 여부 확인) - 비동기 특징 호출된 함수 - 리턴 제어권 계속 가짐 (자신의 작업을 모두 완료할 때까지 호출한 함수에게 제어권을 넘겨주지 않음) - 블로킹 특징 결론: 호출된 함수가 작업 끝날 때까지 아무것도 안하다가 호출된 함수가 "저 작업 끝났어용" 하면 다음 작업 하는 호출한 함수 |
호출한 함수 - 호출된 함수가 제어권을 바로 다시 호출한 함수에게 넘겨줌 (다른 일 할 수 있음) - 호출된 함수의 작업완료 여부를 신경쓰지 않음 (호출된 함수가 콜백함수를 통해 스스로 작업 완료 여부 확인) - 비동기 특징 호출된 함수 리턴 제어권 호출한 함수에게 바로 넘겨줌(제어권 넘겨주고 지 할 일 함) - 논블로킹 특징 결론: 호출된 함수에게 제어권을 주면서 일 시키고 바로 제어권 돌려받고 또 다른 함수에게 또 제어권 주며 일 시키고 제어권 돌려받는 걸 반복하는 호출한 함수. 호출된 함수는 작업 완료 시 스스로 호출한 함수에게 "저 작업 끝났어용" 보고하기 가능 |
Node.js 와 논블로킹에 관한 포스팅
[Node.js] Node.js와 Non-blocking
📍Node.js 란? - Node.js를 한마디로 정의하면 '자바스크립트 런타임'이라고 할 수 있습니다. (*런타임 : 컴퓨터가 실행되는 동안 프로세스나 프로그램을 위한 소프트웨어 서비스를 제공하는 가상 머
lazy-crew.tistory.com
'Node.js' 카테고리의 다른 글
Google Sheet를 nodeJS로 연결하기 [googleapis] (1) | 2022.09.21 |
---|---|
node.js HTTP Server 템플릿 제작(basic)(1) (0) | 2022.03.27 |
discord.js를 이용해서 봇 만들기 [node.js discord 봇 제작] (1) | 2022.03.19 |
[Node.js] Node.js와 Non-blocking (1) | 2021.12.10 |