Nodejs: 논블로킹I/O ::recap::논블러킹은 동시처리가 아니다.

Darcy Daeseok YU ·2023년 6월 3일
0

자바스크립트는 싱글 thread 형식 : 기본적으로 동시에 두개의 작업을 실행할 수 없다.

예외: 자바스크립트상에서 돌아가는 것이 아닌 I/O작업 같은 것은 동시에 처리될 수 있다.

I/O : 입력 Input / 출력 Output
파일 시스템 접근(파일 읽기 및 쓰기, 폴더 만들기 등)이나 네트워크를 통한 요청 같은 작업이 I/O의 일종, 노드에서 I/O 관련 작업은 non-blocking 방식으로 처리하는 방법을 제공

논블로킹 (non-blocking)
작업이 완료될 때까지 대기하지 않고 다음 작업을 수행

블로킹 (blocking)
해당 작업이 끝나야만 다음 작업을 수행

논블로킹 방식이 같은 작업을 더 짧은 시간에 처리함(제약사항 : 작업1과 작업2의 처리 순서에 연관이 없을겨우)

case2 1,3,5번은 동시처리 가능 (색깔이 안보임)

동시에 처리될 수 있는 I/O 작업이더라도 논블로킹 방식으로 코딩하지 않으면 의미가 퇴색되므로 논블로킹 방식으로 코딩하는 습관을 들여야 함

블로킹 방식

function longRunningTask() {
  // 오래 걸리는 작업
  console.log('작업 끝');
}
console.log('시작');
longRunningTask();
console.log('다음 작업');

위를 실행하면
오래 걸리는 작업이 끝나기 전까지 '다음 작업'은 표시되지 않음

시작 -> '작업 끝' 표시까지 시간 오래 걸림 -> 다음 작업

위와 같이 코드되면 오래 걸리는 작업이 완료될때까지 다른 작업은 못함.

논블로킹 방식

function longRunningTask() {
  // 오래 걸리는 작업
  console.log('작업 끝');
}
console.log('시작');
setTimeout(longRunningTask, 0);
console.log('다음 작업');

시작 -> 다음 작업 -> 작업 끝(오래 걸리는 작업 완료)

위와 같이 코드되면 오래 걸리는 작업이 완료될때까지 다른 작업은 가능.

논블로킹 setTimeout(콜백, 0)를
노드에서는 다른 방식을 주로 사용(setImmediate)

논블러킹 처리를 해도 전체 실행시간은 변함없다.
실행 순서만 바뀌었기 때문에 처리시간에는 변함없음.
논블러킹은 동시처리가 아니다.

profile
React, React-Native https://darcyu83.netlify.app/

0개의 댓글