JavaScript/Node_Js

동기비동기

yunajoe 2023. 1. 14. 19:28

 

const fs = require('fs');

console.log('Start'); 

let content = fs.readFileSync('./new', 'utf8'); 
console.log(content); 
console.log('Finish');

Start
HIHI!
Finish

const fs = require('fs');

console.log('Start')  
fs.readFile('./new', 'utf8', (error, data) => {
    console.log(data); 
}); 
console.log('Finish');


// 순서

console.log('Start')  >> 1번 

fs.readFile('./new') >> 2번 

console.log('Finish') >> 3번 

(error, data) => {
    console.log(data); 
});   >> 4번

 

 

Start
Finish
HIHI!

 

 

2. Node.js에서의 비동기 실행

이제 Node.js에서 '비동기 실행'이 구체적으로 어떤 방식으로 이루어지는지 간단히 살펴보겠습니다. 사실 Node.js에서는 작업의 종류에 따라 '비동기 실행'이 다른 방식으로 구현되어 있습니다. 하지만 이번 노트에서는 일단 여러분이 이해하기 쉬운 한 가지만 설명하도록 하겠습니다.

그 전에 한 가지 알아야 하는 개념이 있습니다. 바로 컴퓨터 공학에서 배우는 중요 개념인

  • '프로세스(Process)'
  • '스레드(Thread)'

라는 개념입니다. 프로세스와 스레드는 프로그램의 실행 흐름에 관한 개념인데요. 프로세스가 하나의 실행 흐름이라면, 스레드는 그 안에 있는, 더 작은 단위의 실행 흐름입니다.

예를 하나 들어볼게요.

우리가 노트북에서 크롬 브라우저를 실행했을 때를 잠깐 생각해봅시다. 크롬 브라우저는 노트북에 저장된 하나의 '프로그램(Program)'인데요. 우리가 크롬 브라우저 아이콘을 더블 클릭하면, 이 프로그램이 '실행'됩니다. 이 '실행'이라는 건

(1) 하드디스크(hard-disk)나 SSD에 저장되어 있던 프로그램의 내용을, (2) 메모리(memory)에 올려서 (3) CPU(Central Processing Unit)가 실행하도록 만드는 것을 의미하는데요.

크롬 브라우저를 실행하면, 그 실행 흐름으로

하나의 크롬 '프로세스'라는 것이 생성되고, 그 안에서 하나의 '스레드'가 실행 중인 상태가 됩니다.

 

 

그 뒤에 만약 크롬 브라우저에서

 

 

그 뒤에 만약 크롬 브라우저에서 영화 파일 하나를 다운로드하고(Thread-2),
최신 유행 음악을 재생하면서(Thread-3),
구글 검색(Thread-4)을 하는 등 새로운 작업을 시작할 때마다, 크롬 프로세스 안의 스레드 수는 하나씩 늘어납니다.
아래 그림처럼요.