TIL ( 2021.06.10)

Synchronous(동기) Vs Asynchronous(비동기)

다음과정으로 진행하던 도중 갑자기 막혀버린 동기,비동기...
논블로킹과 비동기와 같은 의미인것같은데 왜 다른단어를 쓰는지 헷갈렸다.
다시한번 복습해봐야겠다고 어제 저녁에 적어놓고 오늘 공부를 시작한다!

블로킹과 논블로킹의 가장 큰 차이점은 프로그램이 바로 실행할 수 있는 유무가 다르다.

Non-Blocking/Blocking I/O Model

  1. Blocking I/O Model
  • Blocking I/O Model 에서는 System Call이 끝날때까지 프로그램은 대기해야 하고 System Call이 완료가 되면 그때야 Return 한다.
  • Wait Queue에 들어간다.

  1. Non-Blocking I/O Model
  • Non-Blocking I/O Model 에서는 System Call이 완료되지 않아도 대기하지 않고 Return 해버린다.

  • Wait Queue에 들어가지 않는다.


Synchronous Vs Asynchronous

Synchronous & Asynchronous은 결과물을 돌려받는 시점에 초점을 두면 좀 더 쉽게 이해를 할 수 있다.

  1. Synchronous

  • Synchronous 에서는 System Call이 끝날때까지 기다리고 결과물을 가져온다.

  1. Asynchronous
  • Asynchronous 에서는 System Call이 완료되지 않아도 나중에 완료가 되면 그때 결과물을 가져온다.
  • 거의 Callback 함수를 통해 결과물을 가져온다.

- Synchronous Vs Asynchronous 차이점

가장 큰 차이점은 결과물을 가저오는 시점이 다르다.


5. Non-Blocking Vs ASynchronous 차이점

  • System Call이 즉시 Return될 때 데이터의 포함 유무

  • Asynchronous은 요청에 처리 완료와 관계없이 응답한다. 이후 운영체제에서 응답할 준비가 되면 응답한다.

  • Non-Blocking은 요청에 처리할 수 있으면 바로 응답하고 아니면 Error를 반환한다.


6. Blocking Vs Synchronous 차이점

  • Wait Queue 유무

  • Blocking은 System Call의 Return을 기다리는 동안 필수로 Wait Queue에 머문다.

  • Synchronous은 System Call의 Return을 기다리는 동안 Wait Queue에 머물 수도 아닐 수도 있다.


callback

  1. 다른 함수의 인자로써 이용되는 함수.

  2. 어떤 이벤트에 의해 호출되어지는 함수.

promise

Promise의 3가지 상태는 Promise의 처리 과정을 의미한다.
new Promise()로 Promise를 생성하고 종료될 때까지 3가지 상태를 가진다.

  • Promise 의 장점
  1. Callback hell 문제 해결
  2. 에러 처리와 관련된 인자를 모든 함수에 넘겨야하는 콜백 방식에 비하면 Promise 의 에러 처리 방식은 단순하다.
구문
new Promise(function (resolve, reject) { /* ... */ });
resolve 는 완료되었을 때 실행하는 함수이고, reject 는 실패했을 때 실행하는 함수이다.


Pending(대기) : 비동기 처리 로직이 아직 완료되지 않은 상태

new Promise(function (resolve, reject) {
// ...
});

  • 메서드를 호출하면 대기 상태가 되고, 호출할 때 콜백 함수의 인자로 resolve, reject에 접근할 수 있다.

Fulfilled(이행) : 비동기 처리가 완료되어 Promise가 결과 값을 반환해준 상태

  • resolve를 실행하면 이행 상태가 된다. 이후 then()을 이용하여 처리 결과 값을 받을 수 있다.

Rejected(실패) : 비동기 처리가 실패하거나 오류가 발생한 상태

  • reject() 메서드를 실행하면 실패 상태가 된다. 실패상태가 되면 실패한 이유(실패 처리의 결과 값)을 catch()로 받을 수 있다.

예외처리

  • try catch 방법

async function logTodoTitle() {
try {
var user = await fetchUser();
if (user.id === 1) {
var todo = await fetchTodo();
console.log(todo.title); // delectus aut autem
}
} catch (error) {
console.log(error);
}
}


Promise vs Callback

  1. 콜백은 함수이며, 프로미스는 객체이다.
  • 콜백은 이벤트에 응답하여 실행할 수 있는 코드 블록으로 모든 함수는 콜백이 될 수 있다.
  • 프로미스는 어떠한 작업이 일어났는지 아닌지에 대한 정보를 저장하는 객체이며, 작업이 일어난 경우 그 결과가 무엇인지 나타낸다.
  1. 콜백은 인자로 전달되며, 프로미스는 반환된다.
  • 콜백은 호출된 함수와는 별개로 정의되며, 다른 함수의 인자로써 전달된다.
  • 프로미스는 비동기 함수 내부에서 생성된 다음 반환된다.
  1. 콜백은 성공과 실패를 처리하고, 프로미스는 아무것도 처리하지 않는다.
  • 콜백은 작업이 성공했는지 실패했는지 여부와 함께 호출되며, 두 시나리오를 모두 처리해야한다. 또한, 두 시나리오에 대한 인자를 항상 받아야 한다.
  • 프로미스는 기본적으로 아무것도 처리되지 않는다. 성공 및 실패는 .then() 이나 .catch() 메소드 등을 통해 나중에 처리된다.
    4, 콜백은 여러 이벤트를 나타낼 수 있고, 프로미스는 최대 하나의 이벤트를 나타낼 수 있다.
  • 콜백은 전달된 함수에 의해 여러 번 호출될 수 있다.
  • 프로미스는 하나의 이벤트만 나타낼 수 있다.

참고 :
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/async_function
mdn sync async promise

좋은 웹페이지 즐겨찾기