Study/BackEnd

동기 vs 비동기, 블로킹 vs 논블로킹

ujam 2021. 8. 31. 22:20
728x90
반응형

동기 (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)합니다.

 

 

 

 

 

항상 부족한 부분이나 피드백할 부분을 댓글로 남겨주시면 적극적으로 수용하여 수정하겠습니다.

728x90
반응형

'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