Synchronous(동기) Vs Asynchronous(비동기)
다음과정으로 진행하던 도중 갑자기 막혀버린 동기,비동기...
논블로킹과 비동기와 같은 의미인것같은데 왜 다른단어를 쓰는지 헷갈렸다.
다시한번 복습해봐야겠다고 어제 저녁에 적어놓고 오늘 공부를 시작한다!
블로킹과 논블로킹의 가장 큰 차이점은 프로그램이 바로 실행할 수 있는 유무가 다르다.


Non-Blocking I/O Model 에서는 System Call이 완료되지 않아도 대기하지 않고 Return 해버린다.
Wait Queue에 들어가지 않는다.
Synchronous & 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에 머물 수도 아닐 수도 있다.
다른 함수의 인자로써 이용되는 함수.
어떤 이벤트에 의해 호출되어지는 함수.
Promise의 3가지 상태는 Promise의 처리 과정을 의미한다.
new Promise()로 Promise를 생성하고 종료될 때까지 3가지 상태를 가진다.
구문
new Promise(function (resolve, reject) { /* ... */ });
resolve 는 완료되었을 때 실행하는 함수이고, reject 는 실패했을 때 실행하는 함수이다.
Pending(대기) : 비동기 처리 로직이 아직 완료되지 않은 상태
new Promise(function (resolve, reject) {
// ...
});
Fulfilled(이행) : 비동기 처리가 완료되어 Promise가 결과 값을 반환해준 상태
Rejected(실패) : 비동기 처리가 실패하거나 오류가 발생한 상태
예외처리
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);
}
}
참고 :
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