자바스크립트는 싱글 스레드에서 동기방식으로 이루어진다. 동기 방식은 하나의 명령이 끝나야지만 다음 코드가 실행된다. 하지만, 모던 자바스크립트 환경에서는 많은 양의 정보를 다양한 방식으로 제공하기 위해 많은 것이 비동기로 작동한다.
ex) 사용자가 검색어를 입력해 검색을 위한 네트워크 요청이 발생하는 순간에도 사용자는 다른 작업을 처리할 수 있다.
리액트에서는 렌더링 스택을 비우는 방식으로 구현됐던 동기식의 렌더링이 16버전에 접어서 비동기식으로 작동하는 방법이 소개됨 ⇒ 18버전
자바스크립트는 왜 싱글 스레드로 설계 되었을까?
- 멀티 스레드는 여러가지 이점이 있지만, 내부적으로 처리가 복잡하다. 동시성 문제를 해결해야함.
- 자바스크립트의 출현을 살펴보면 이게 설명이됨, 1995년 첫선을 보인 자바스크립트가 출현할 당시에는 멀티 스레드에 대한 개념이 대중화 되지 않았다. (2002년에 첫 멀티스레드 데스크톱 나옴). 처음에는 그냥 html을 조작을 하기 위한 수단으로 만들어졌다.
<aside>
🧠 설계 당시에는 약 30년뒤 현재처럼 자바스크립트로 웹 페이지에서 벌어지는 온갖 다양한 일을 처리해야 할 것이라고 생각하지 못했을 것이다.
</aside>
<aside>
🧠 동시에 여러개의 스레드가 DOM을 조작할수 있다면, 메모리 공유로 인해 동시에 같은 자원에 접근하면 타이밍 이슈 발생 ⇒ DOM에 문제 야기
</aside>
- 싱글 스레드 = 자바스크립트 코드의 실행이 하나의 스레드에 순차적으로 이루어짐 = 코드를 한 줄 한 줄 실행한다. = 하나의 작업이 끝나기 전까지 뒤이은 작업이 실행되지 않는다.
<aside>
🧠 하나의 코드가 실행하는 데 오래걸리면, 뒤이은 코드가 실행되지 않는다.
</aside>
- 장점으로 자바스크립트 개발자는 동시성을 고민하지 않아도 된다.
- 웹 페이지에서는 단점이 될 수 있다. 하나의 작업이 끝나기 전까지는 다른작업이 실행되지 않으므로, 어떠한 작업이 오래 걸린다면 사용자에게 마치 웹페이지가 멈춘 것 같은 느낌을 줄 수 있다.
비동기
- asynchronous : 동시에 일어나지 않는다.
- 요청한 즉시 결과가 주어지지 않을 수도 있고, 따라서 응답이 언제 올지도 알 수 없다.