※ 강의를 듣고 제가 이해한 것을 바탕으로 정리한 것이라서 오류가 있을 수 있습니다.

 

 

비동기 처리의 개념

작업을 동기적으로 처리한다면 앞의 작업이 끝날때까지 기다리는 동안 다른 작업은 중지상태가 되기 때문에  다른 작업을 할 수 없고 비로소 앞의 작업이 끝나면 다음 작업이 시작되는데

 

비동기 처리는 흐름이 멈추지 않기 때문에 동시에 여러가지 작업을 처리할 수 있고 기다리는 과정에서 

다른 함수도 호출 할수 있다.

 

이것을 아래의 코드를 보고 이해 해보면

function work() {
  const start = Date.now(); // Date.now 함수는 현재시간을 숫자의 형태로 알려주는 자바스크립트 내장 함수
  for (let i = 0; i < 1000000000; i++) {}
  const end = Date.now();
  console.log(end - start + 'ms');
}

work();
console.log('다음 작업');

위 work 함수는 1,000,000,000 번 루프를 돌고 이 작업이 얼마나 걸렸는지 알려준다.

 

실행 결과

 

지금은 work() 함수가 호출되면 for 문이 돌아갈 때는 다른 작업은 처리하지 않고 온전히 for 문만 실행하고 있다.

 

만약 이 작업이 진행되는 동안 다른 작업도 하고 싶다면 함수를 비동기 형태로 전환을 해주어야하는데

그렇게 하기 위해서는 아래와 같이 setTimeout 이라는 함수를 사용해주어야한다.

 

function work() {
    setTimeout(() => {
      const start = Date.now();
      for (let i = 0; i < 1000000000; i++) {}
      const end = Date.now();
      console.log(end - start + 'ms');
    }, 0);
}
  
console.log('작업 시작!');
work();
console.log('다음 작업');

setTimeout 함수는 첫번째 파라미터에 넣는 함수를 두번째 파라미터에 넣은 시간(ms 단위)이 흐른 후 호출해주는데 여기서는 두번째 파라미터에 0을 넣었다.

따라서 이 함수는 바로 실행이 된다. 0ms 이후에 실행한다는 의미이지만 실제로는 4ms 이후에 실행이된다.

왜냐하면 브라우저의 최소 실행 시간이 4ms이기 때문이다.

 

 이렇게 setTimeout 을 사용하면 자신이 정한 작업이 백그라운드에서 수행되기 때문에 기존의 코드 흐름을 막지 않고 동시에 다른 작업들을 진행 할 수 있다.

 

실행 결과

 

실행 결과를 보면 작업이 시작 되고 나서, for 루프가 돌아가는 동안 다음 작업도 실행되고 for 루프가 끝나고 나서 몇 ms 걸렸는지 나타나고 있다.

이렇게 for루프가 돌아가는 동안 동시에 다음 작업이라는 문자를 출력하라는 명령이 같이 실행 되는 것이다.

'개발 공부한 내용 정리 > JavaScript' 카테고리의 다른 글

JavaScript- async / await  (0) 2020.08.20
JavaScript- Promise  (0) 2020.08.19
JavaScript- Scope의 이해  (0) 2020.08.17
JavaScript- spread 와 rest  (0) 2020.08.16
JavaScript- 조건문 더 스마트 하게 쓰기  (0) 2020.08.15

+ Recent posts