Asynchronous & Synchronous
- 자바스크립트는 싱글 쓰레드(Single Thread) 언어이므로, 한번에 하나의 작업만 처리 가능
- 따라서 자바스크립트로 여러 작업을 처리하기 위해 비동기라는 개념이 도입됨.
- 비동기는 메인 스레드가 작업을 다른 곳에 인가하여 처리하고, 그 작업이 완료되면 콜백 함수를 받아 실행하는 방식이다.
- 즉, 작업을 백그라운드에 요청하여 멀티로 작업을 동시에 처리하는 것
어떻게 병렬처리하는가?
- 자바스크립트는 싱글스레드(콜스택이 하나)이긴 한데..서버에게 리소스를 요청하거나 파일 입출력 혹은 타이머 대기 작업을 실행하는 Web APIs 들은 멀티스레드이다.
- 따라서 동시에 작업처리가 가능함
- 즉, 브라우저라는 소프트웨어가 멀티스레드이므로 메인 자바스크립트 스레드를 차단하지 않고 다른 스레드를 사용하여 Web API의 작업을 처리하여 동시에 처리가 가능한 것.
그런데 완벽한 멀티스레딩은 아니다.
setTimeout(()=>{
},3000);
- 위의 코드에서 타이머 3초는 멀티스레드로 병렬적으로 처리해주나, 그 안의 콜백함수 실행 코드는 추후에 이벤트 루프에 인해 콜스택에 들어가 싱글스레드로 처리되기 때문
왜 전부다 병렬처리를 하지 않는걸까?
- 완전한 병렬처리는 성능은 이득을 얻을 수 있으나, 항상 동시성 문제가 따라와서 syncrhoized 처리가 수반된다.
- 즉, 동시성 문제에 심플하게 해결하기 위해서 비동기 콜백함수 방식을 채택함.
자바스크립트에서 멀티 스레딩 하고싶다면?
브라우저의 비동기 처리