본문 바로가기
Programming

[Programming] Non blocking / Blocking

by 2__50 2020. 7. 9.

Non blocking / Blocking

Blocking

 

- 동기적

- 자신의 수행결과가 끝날 때까지 제어권을 가지고 있다.

- 단점: 앞의 명령이 처리되지 않으면 계속 뒤의 명령의 처리가 지연되어 병목현상 발생

( multi-thread(명령 하나에 thread 하나를 배정하여 동시에 여러 개의 명령을 처리하는 방식)로 해결 할 수 있는 것처럼 보이지만 명령 하나당 thread 하나가 배정되므로, 명령의 수가 엄청 많아진다면 서버가 가진 자원은 한정되어 있으므로 서버를 업그레이드하거나 여러 개의 서버로 분산처리 해야 한다.


Non-Blocking

 

- 비동기적

- 자신이 호출되었을 때 제어권을 바로 자신을 호출한 쪽으로 넘기며, 자신을 호출한 쪽에서 다른 일을 할 수 있도록 한다.

- 장점: 앞의 명령이 처리될 때까지 기다리지 않기 때문에 명령이 밀리는 병목 현상이 없다.

- single-thread : 한개의 thread 사용

 

 

코드비교

 

동기

const fs = require('fs');
const data = fs.readFileSync('/file.md'); // 파일을 읽을 때까지 여기서 블로킹 됩니다.

 

비동기 

const fs = require('fs');
fs.readFile('/file.md', (err, data) => {if (err) throw err; }

 

- 첫 예제가 두 번째보다 간단해 보이지만 두 번째 줄에서 전체 파일을 읽을 때까지 다른 JavaScript 실행이 블로킹되는 단점이 있다. 동기 예제에서 오류가 발생하면 반드시 처리해주어야 하고 그렇지 않으면 프로세스가 죽는다. 비동기 예제에서는 예제에 나왔듯이 에러를 던질지 아닐지는 작성자에게 달려있다.

 

 

 

 

감사의 마음을 전하는 링크들

 

칼럼:

 

https://nodejs.org/ko/docs/guides/blocking-vs-non-blocking/

 

블록킹과 논블록킹 살펴보기 | Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

https://medium.com/@lee.ellen0814/what-is-node-js-6694f2156fb3

 

What is Node.js ?

Blogging Club

medium.com

 

댓글