운영체제 - 동기와 비동기
동기와 비동기
: 데이터를 받는 방식
✔ 동기(synchronous )
- 동시에 일어난다는 뜻으로 요청과 결과가 동시에 일어난다는 약속이다.
요청을 하면 시간이 얼마나 걸리는지 상관없이 그 자리에서 결과가 나와야 한다.
(요청후→응답받고→다음동작실행) - 노드와 노드 사이의 작업처리단위를 동시에 맞추겠다.
- 장점:설계과 매우 간단하고 직관적이다.
- 단점:결과가 주어질때까지 아무일도 하지못하고 대기해야한다.
✔ 비동기(Asynchronous)
- 동시에 일어나지않는다는 뜻으로 요청과 결과가 동시에 일어나지 않는다는 약속이다. (요청후→응답상관없이 다음동작실행)
- 요청한 그 자리에서 결과가 나오지않음
- 노드와 노드사이의 작업처리단위를 동시에 맞추지않겠다.
- 장점:요청을하고 결과가 나오는 시간동안 다른작업을 할 수 있으므로 자원을 효율적으로 사용한다
- 단점:동기보다 복잡하다.
동기와 비동기는 어떤 작업 혹은 그와 연관된 작업을 처리하고자 하는 시각의 차이이다.
✔비동기 작업
callback() :비동기 방식의 함수
다른 함수의 매개변수로 함수를 전달하고, 어떠한 이벤트가 발생한 후 매개변수로 전달한 함수가 다시 호출된다.
코드가 길어지면 가독성이 떨어져 관리어려움 → 콜백헬
const f1=(callback)=>{
setTimeout(function(){
console.log("1번 주문완료");
callback();
}, 1000);
};
const f2=(callback)=>{
setTimeout(function(){
console.log("2번 주문완료");
callback();
}, 2000);
};
const f3=(callback)=>{
setTimeout(function(){
console.log("3번 주문완료");
callback();
}, 1000);
};
console.log('시작')
f1(function(){
f2(function(){
f3(function(){
console.log("끝")
});
});
});
promise()
비동기적으로 실행하는 작업의 결과를 나타내는 객체 (비동기의 결과를 객체화 시킴)
콜백 행들링하기 좋다
const pf1 = () => {
return new Promise((res, rej) => {
setTimeout(() => {
res("1번 주문완료");
}, 1000);
});
};
const pf2 = () => {
return new Promise((res, rej) => {
setTimeout(() => {
res("2번 주문완료");
}, 2000);
});
};
const pf3 = () => {
return new Promise((res, rej) => {
setTimeout(() => {
res("3번 주문완료");
}, 3000);
});
};
console.log("시작");
pf1()
.then((res) => pf2(res)) //f1(프로미스반환)실행, resolve함수를 실행으로 넘긴값을 f2로 넘겨줌
.then((res) => pf3(res))
.then((res) => console.log(res))
.catch(console.log)
.finally(() => {
console.log("끝");
});
async/await()
가장 간편함, 프로미스의 then메소드를 체인형식으로 호출하는것보다 가독성이 좋음
const pf1 = () => {
return new Promise((res, rej) => {
setTimeout(() => {
res("1번 주문완료");
}, 1000);
});
};
const pf2 = (message) => {
console.log(message);
return new Promise((res, rej) => {
setTimeout(() => {
res("2번 주문완료");
}, 2000);
});
};
const pf3 = (message) => {
console.log(message);
return new Promise((res, rej) => {
setTimeout(() => {
res("3번 주문완료");
}, 3000);
});
};
console.log("시작");
async function order() { //await는 async함수 내부에서만 사용가능 일반함수에서 사용하면 에러
const result1 = await pf1();//프로미스 차례가 될때까지 기다림 result에 pf1의 resolve된 값을 넣어줌
const result2 = await pf2(result1);
const result3 = await pf3(result2);
console.log(result3);
console.log("종료");
//result1 변수에 pf1()데이터가 기다렸다가 들어가니깐 promise의 then보다 가독성이 좋음
}
order();
Author And Source
이 문제에 관하여(운영체제 - 동기와 비동기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yejz0715/운영체제-동기와-비동기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)