본문 바로가기
Node.js

Node.js: 04. 동기 & 비동기 방식

by KIha_Jung 2019. 9. 28.

1. 동기(synchronuous) & 비동기(Asynchronuous)란?

 

https://private.tistory.com/24

 

동기와 비동기의 개념과 차이

데이터를 받는 방식인 동기와 비동기. 이 둘의 개념에 대해 설명하는 게시물은 매우 많은데 프로그래밍적으로 생각했을 때 이해가 가지 않아서 쉽게 이해를 할 수 있는 동기와 비동기의 예가 어떤것들이 있는지 검..

private.tistory.com

* 동기와 비동기, 블로킹과 논블로킹의 차이

동기와 비동기 : 함수가 바로 return 되는지 여부

블로킹과 논블로킹 : 백그라운드 작업 완료 여부

2. 비동기 방식

// assync.js
const fs = require('fs');

console.log('시작');
fs.readFile('./readme2.txt', (err, data) => {
    if (err) {
        throw err;
    }
    console.log('1', data.toString());
})

fs.readFile('./readme2.txt', (err, data) => {
    if (err) {
        throw err;
    }
    console.log('2', data.toString());
})

fs.readFile('./readme2.txt', (err, data) => {
    if (err) {
        throw err;
    }
    console.log('3', data.toString());
})
console.log('끝');

비동기 방식으로 결과를 출력했다. 호출한 순서와 출력의 순서가 다르다. 

비동기식 바식의 장점은 수백 개의 I/O 요청이 들어와도 메인 스레드는 백그라운드에 요청 처리를 위임한다. 그 이후에 얼마든지 요청을 더 받을 수 있다. 백그라운드가 각각의 요청 처리가 완료되었다고 알리면 그때 콜벡 함수를 처리한다.

 

3. 동기식 방식

// sync.js
const fs = require('fs');

console.log('start');
let data = fs.readFileSync('./readme2.txt');
console.log('1', data.toString());
let data = fs.readFileSync('./readme2.txt');
console.log('2', data.toString());
let data = fs.readFileSync('./readme2.txt');
console.log('3', data.toString());
console.log('end');

fs 모듈은 다양한 동기화 메서드를 제공한다.

콜백 함수 대신 직접 return 값을 받아온다.

단점 : 수백개 이사의 요청이 들어왔을대 성능 문제가 생긴다.

메인 스레드 대기시간이 올라간다.

 

'Node.js' 카테고리의 다른 글

Node.js: 03. 파일 시스템 접근  (0) 2019.09.28
Node.js: 02. 양방향 암호화  (0) 2019.09.28
Node.js: 01. 단방향 암호화  (0) 2019.09.27

댓글