동기 (synchronous)
요청 후 응답을 받아야 다음 동작이 이루어지는 방식입니다. (작업완료 여부를 호출한 쪽에서 신경씁니다)
설계가 간단하고 직관적이지만 결과가 주어질 때까지 아무것도 못하고 대기해야합니다.
// 동기적 코드
console.log('A');
console.log('B');
console.log('C');
/* 결과
1
2
3
*/
비동기 (asynchronous)
요청 후 응답을 받지 않아도 다음 동작이 이루어지는 방식입니다. (작업완료 여부를 호출된 쪽에서 신경을 씁니다.)
동기보다 복잡하지만 특정 결과가 주어지는 시간 동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있습니다.
// 비동기적 코드
function asyncFunc() {
console.log('A');
}
setTimeout(asyncFunc, 1000);
console.log('B');
console.log('C');
/* 출력 결과
B
C
A
*/
블로킹 (Blocking)
작업이 중단된다는 뜻 입니다.
제어권을 호출된 함수가 가지고 있어서 호출된 함수가 호출한 함수를 막고 있는 것을 뜻 합니다.
통신이 완료될 때 까지 모든 일을 중단한 상태로 대기해야 합니다.
논블로킹 (NonBlocking)
작업이 중단되지 않는다는 뜻 입니다.
호출된 함수가 자신의 일의 종료는 상관없이 제어권을 호출한 함수에게 넘겨주는 것을 뜻 합니다.
통신이 완료될 때 까지 기다리지 않고 다른 작업을 수행할 수 있어 효율성이 뛰어납니다. (블로킹 보다 설계가 복잡)
Sync-Blocking
결과가 나올때까지 기다려서 return으로 결과를 전달합니다.
Sync-NonBlocking
호출을 하고 바로 return 되고 다른일을 수행합니다.
결과가 나오면 바로 결과를 return 합니다. (작업이 완료됐는지 계속 물어보는 일을 수행합니다)
Async-Blocking
이 방식은 장점이 없어 굳이 사용하진 않습니다.
Async-NonBlocking
이 방식이 리소스를 가장 효율적으로 사용하는 방식입니다.
요청한 처리에 대해 신경 안 쓰다가 요청이 끝나면 결과는 간접적으로 전달(callback)합니다.
항상 부족한 부분이나 피드백할 부분을 댓글로 남겨주시면 적극적으로 수용하여 수정하겠습니다.
'Study > BackEnd' 카테고리의 다른 글
홈브류(Homebrew)란? (0) | 2021.09.29 |
---|---|
NestJS란 (0) | 2021.08.30 |
객체 지향 프로그래밍(OOP, Object-Oriented Programming) 이란? (0) | 2021.08.18 |
Sequelize 란? 설치 및 사용법 (0) | 2021.08.14 |
Node.js 란? (0) | 2021.08.10 |