TIL ( 2021.06.10)
Synchronous(동기) Vs Asynchronous(비동기)
다음과정으로 진행하던 도중 갑자기 막혀버린 동기,비동기...
논블로킹과 비동기와 같은 의미인것같은데 왜 다른단어를 쓰는지 헷갈렸다.
다시한번 복습해봐야겠다고 어제 저녁에 적어놓고 오늘 공부를 시작한다!
블로킹과 논블로킹의 가장 큰 차이점은 프로그램이 바로 실행할 수 있는 유무가 다르다.
Non-Blocking/Blocking I/O Model
- Blocking I/O Model
- Blocking I/O Model 에서는 System Call이 끝날때까지 프로그램은 대기해야 하고 System Call이 완료가 되면 그때야 Return 한다.
- Wait Queue에 들어간다.
- Non-Blocking I/O Model
-
Non-Blocking I/O Model 에서는 System Call이 완료되지 않아도 대기하지 않고 Return 해버린다.
-
Wait Queue에 들어가지 않는다.
Synchronous Vs Asynchronous
Synchronous & Asynchronous은 결과물을 돌려받는 시점에 초점을 두면 좀 더 쉽게 이해를 할 수 있다.
- Synchronous
- Synchronous 에서는 System Call이 끝날때까지 기다리고 결과물을 가져온다.
- 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
-
다른 함수의 인자로써 이용되는 함수.
-
어떤 이벤트에 의해 호출되어지는 함수.
promise
Promise의 3가지 상태는 Promise의 처리 과정을 의미한다.
new Promise()로 Promise를 생성하고 종료될 때까지 3가지 상태를 가진다.
- Promise 의 장점
- Callback hell 문제 해결
- 에러 처리와 관련된 인자를 모든 함수에 넘겨야하는 콜백 방식에 비하면 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
- 콜백은 함수이며, 프로미스는 객체이다.
- 콜백은 이벤트에 응답하여 실행할 수 있는 코드 블록으로 모든 함수는 콜백이 될 수 있다.
- 프로미스는 어떠한 작업이 일어났는지 아닌지에 대한 정보를 저장하는 객체이며, 작업이 일어난 경우 그 결과가 무엇인지 나타낸다.
- 콜백은 인자로 전달되며, 프로미스는 반환된다.
- 콜백은 호출된 함수와는 별개로 정의되며, 다른 함수의 인자로써 전달된다.
- 프로미스는 비동기 함수 내부에서 생성된 다음 반환된다.
- 콜백은 성공과 실패를 처리하고, 프로미스는 아무것도 처리하지 않는다.
- 콜백은 작업이 성공했는지 실패했는지 여부와 함께 호출되며, 두 시나리오를 모두 처리해야한다. 또한, 두 시나리오에 대한 인자를 항상 받아야 한다.
- 프로미스는 기본적으로 아무것도 처리되지 않는다. 성공 및 실패는 .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
Author And Source
이 문제에 관하여(TIL ( 2021.06.10)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@park0866/TIL-2021.06.10저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)