비동기

김상한·2022년 3월 12일
0

Today I Learned

목록 보기
9/9

동기와 비동기

동기는 요청을 보낸 후 응답을 받아야지만 다음 동작이 이루어지는 방식을 말한다.
작업을 순차적으로 실행하며 어떤 작업이 수행중인 경우 다음 작업은 대기하게 된다.

비동기 방식은 반대로 요청을 보냈을 때 응답 상태와 관계없이 다음 동작을 수행할 수 있다.
작업을 순차적으로 실행하되 결과가 먼저 나오는 순서대로 결과를 반환한다.

비동기를 사용하는 경우

1.사용자 이벤트 처리

브라우저 화면에서 발생하는 사용자의 이벤트는 예측이 불가능하다.
따라서 이런 화면이벤트를 관리담당하는 녀석에게 우리는 특정이벤트가 발생할 때 호출을 원하는 내용을 callback 함수에 전달하게 된다.

2.네트워크 응답 처리

화면단에서 서버에게 요청을 보냈을 때, 그 응답이 언제 올지 알 수 없다.
따라서 이런 서버에 대한 응답처리 등도 비동기적으로 처리해야 한다.

3.파일을 읽고 쓰는 등의 파일 시스템 작업

4.의도적으로 시간 지연을 사용하는 기능(알람 등)

Callback

콜백 함수란

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

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

동기적 callback

function fn_fakeAsync(callback){
calback();
}

console.log("------- fn_fakeAsync 호출 직전 -------");

fn_fakeAsync(function(){
console.log("이게 비동기적으로 동작하길 바래");
});

console.log("------- fn_fakeAsync 호출 이후 -------");

------- fn_fakeAsync 호출 직전 -------
이게 비동기적으로 동작하길 바래
------- fn_fakeAsync 호출 이후 ------

비동기적으로 콜백함수를 실행하는 함수가 필요!

setTimeout(callback, millisecond)

setInterval(callback, millisecond)
clearInterval(timerId)

비동기적 callback

function fn_newCallBack(){
console.log("비동기적으로 호출되고 싶다.");
}

console.log("------- 호출 직전 -------");

setTimeout(fn_newCallBack, 0);

console.log("------- 호출 이후 -------");

------- 호출 직전 -------
------- 호출 이후 -------
비동기적으로 호출되고 싶다.

while(true){
console.log("한국 일교차 너무해...");
}

setTimeout함수에 전달된 콜백함수는 javascript 실행환경의 어느 바구니에 담겨진다.
그러면 javascript API가 setTimeout의 지연시간을 보고 카운팅을 대신 해준다.
javascript API는 이 콜백함수를 바구니에 꺼내서, TaskQueue라는 곳에 적재한다.
이 TaskQueue는 현재 동작중인 메인스레드가 일을 다 끝내면, 다음으로 해야할 일들이 있는 Queue이다.

setTimeout과 같은 비동기적으로 콜백을 호출 시켜주는 함수는, 전달된 콜백함수를 현재 실행중인 싱글스레드에서 뽑아내어 특정 장소에 보관하고 특정 조건을 만족시킬때 호출이 가능하게 한다는 점이다.

profile
성장하는 사람

0개의 댓글