Blocking과 Non-Blocking

Min·2021년 1월 7일
0

NodeJS

목록 보기
1/3
post-thumbnail

Blocking과 Non-Blocking

1. Blocking

동기적

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

단점

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

2. Non-Blocking

비동기적

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

장점

  • 앞의 명령이 처리될 때까지 기다리지 않기 때문에 명령이 밀리는 병목 현상이 없다.
  • single-thread : 한개의 thread 사용

3. 코드비교

동기

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 실행이 블로킹되는 단점이 있다.
  • 동기 예제에서 오류가 발생하면 반드시 처리해주어야 하고 그렇지 않으면 프로세스가 죽는다.
  • 비동기 예제에서는 예제에 나왔듯이 에러를 던질지 아닐지는 작성자에게 달려있다.

블로킹과 논블로킹 살펴보기
What is Node.js ?

4. 동시성(Concurrency)과 병렬성(Parallelism)

비동기 작업을 할 때 ConcurrencyParallelism에 대한 이야기가 자주 오고 간다.

동시성(Concurrency)

  • 한 번에 여러 스레드를 다루는 것
  • 하나의 코어에서 여러 스레드가 번갈아 가며 실행되는 성질
  • 동시에 실행되는 것처럼 보이지만 실제로는 시분할하여 번갈아 실행
  • 논리적 관점

병렬성(parallelism)

  • 한 번에 여러 스레드를 실행하는 것
  • 다중 코어에서 실제로 각 코어들이 동시에 실행되는 성질
  • 물리적 관점

동시성(Concurrency)과 병렬성(Parallelism)-1
동시성(Concurrency)과 병렬성(Parallelism)-2

profile
slowly but surely

0개의 댓글