synchronous (동기적)

우리가 일을 할 때를 생각해보자

일 10분 -> 일 2시간 -> 일 1시간 -> 일 40분

일이 다 끝날때까지 기다리다가 다 끝나면 다른 일 시작

(일이 오랫동안 처리되어야 하는 경우에도 기다렸다가 다음 일 처리)

 

asynchronous (비동기적) - 효율적 but 복잡

일 10분 -> 일 2시간

               -> 일 1시간 

일이 끝날때까지 기다리지 않고 다음 일 진행

(병렬적으로 동시에 여러가지 일 처리)

 

동기 & 비동기 가 코드 level 에서 어떤 차이를 갖는지 ?

https://nodejs.org/dist/latest-v12.x/docs/api/https://nodejs.org/dist/latest-v12.x/docs/api/fs.html

 

Index | Node.js v12.18.3 Documentation

 

nodejs.org

위의 링크에 들어가서 확인해 보면 

이름 뒤에 sync가 붙는 경우가 있고 아닌 경우가 있다. 

 

readFileSync (동기적)

fs.readFileSync(path[, options]);

// syntax directory 안에 sample.txt가 저장되어있음
// sample.txt 내용은 'B'
console.log('A');
var result = fs.readFileSync('syntax/sample.txt','utf8');
console.log(result);
console.log('C');

A B C 순서로 출력됨

 

readFile (비동기적)

fs.readFile(path[,options],callback);

readFileSync는 return 값을 반환하는데,

반면에 readFile은 return값을 주지 않기 때문에 함수를 세번째 인자로 주어야 

함수의 첫번째 parameter : error가 있다면 'err' 인자로 제공

두번째 parameter : 파일의 내용을 인자로서 구분해주도록 약속되어있음

// syntax directory 안에 sample.txt가 저장되어있음
// sample.txt 내용은 'B'
console.log('A');
fs.readFile('syntax/sample.txt','utf8',function(err,result){
    console.log(result);
});
console.log('C');

A C B 순서로 출력됨

readFile이 동작이 완료되기 전에 'C 출력'이 실행됨

 

callback

var a = function(){
    console.log('A');
}

위 코드를 보면 "a라는 변수에 값으로써 함수를 정의  : javascript에서는 함수 = 값" 이라는 점을 알 수 있다. 

 

var a = function(){
    console.log('A');
}

function showfunc(callback){
    callback();
}

showfunc(a);

-위 코드 해설-

showfunc라는 오랜시간이 걸려 동작하는 함수가 실행되고

callback 이라는 parameter는 a가 가리키는 함수를 가리키게 된다

callback()이라는 함수를 호출하면 a가 가리키는 함수가 실행된다

 

+ Recent posts