비동기적(Asychronous) 이란?
하나의 프로세서에서 작업이 진행중일 때 다른 프로세서에서 작업을 수행할 수 있게 하는 것.
JavaScript는 기본적으로 single threaded 이기 때문에 하나의 작업이 진행되는 동안 다른 작업을 진행할 수 없다.
Threads란?
Thread는 기본적으로 프로그램이 작업을 완료하는데 사용할 수 있는 단일 프로세스이다. 각 스레드는 한 번에 하나의 작업만 수행할 수 있다. 앞의 작업이 완료되어야만 다음 작업을 실행할 수 있다.
현재, 많은 컴퓨터들이 CPU 코어를 가지고 있다. 따라서 한번에 여러가지 일을 수행할 수 있다.
그래서 multiple thread를 지원하는 프로그래밍 언어는 멀티코어 컴퓨터의 CPU를 사용하여 여러 작업을 동시에 처리할 수 있다.
하지만, JavaScript는 single thread를 지원하는 프로그래밍 언어이기 때문에 컴퓨터가 여러개의 CPU를 가지고 있어도 main thread에서만 작업을 수행할 수 있다.
JavaScript는 이러한 문제를 해결하기 위해 몇 가지 툴을 도입했다.
1. Web workers
Web workers 는 여러개의 JavaScript 청크를 동시에 실행할 수 있도록 별도의 thread(worker thread)로 보낼 수 있다. 따라서 시간이 오래 걸리는 처리는 worker thread를 활용하면 blocking 발생을 막을 수 있다.
하지만 Web worker는 DOM에 접근할 수 없다는 한계를 가지고 있다. 또한 worker에서 실행되는 코드가 함수를 사용할 때 동기적으로 실행된다는 점도 한계이다. 동기적인 수행에서 함수의 파라미터를 받아오지 못하는 경우 오류가 생길 수 있다.
따라서 이러한 문제를 해결하기 위해서는 브라우저를 통해 특정 작업을 비동기적으로 수행하는 것이 필요하다. 이것은 Promises를 사용하여 문제를 해결할 수 있다.
(추후 내용 보충 예정)
참고자료: https://developer.mozilla.org/ko/docs/Learn/JavaScript/Asynchronous/Concepts
'javascript' 카테고리의 다른 글
함수형 JavaScript 기본기 (2) | 2021.07.29 |
---|---|
함수형 JavaScript 공부하기 (0) | 2021.07.29 |