웹 워커(Web worker)는 스크립트 연산을 웹 어플리케이션의 주 실행 스레드와 분리된 별도의 백그라운드 스레드에서 실행할 수 있는 기술입니다. 웹 워커를 통해 무거운 작업을 분리된 스레드에서 처리하면 주 스레드(보통 UI 스레드)가 멈추거나 느려지지 않고 동작할 수 있습니다.
https://velog.io/@whow1101/Web-Worker
알다싶이 JS는 싱글스레드(Event Loop) 위에서 동작하는 언어입니다. 그렇다면 어떻게 멀티스레드가 가능한 것일까요?
정답은 JS는 싱글스레드이지만 브라우저는 멀티스레드라서 그렇습니다. 싱글스레드인 Event Loop를 여러 개 만들면 멀티 스레드가 가능해지는 식입니다.
웹 워커를 사용하면 메인 스레드와 별도의 워커 스레드가 생성되고 별도의 Event Loop을 가지게 됩니다.
메인스레드와는 직접적인 통신이 불가능합니다. 따라서 별도의 Message Channel을 이용해 통신합니다. (위 이미지의 postMessage
이용)
MDN의 설명처럼 무거운 연산을 백그라운드에서 실행하게 만들어 메인 스레드가 멈추지 않게 만들 수 있습니다. 메인 스레드가 멈추면 UI도 정지하게 됩니다. (Block 된다고 하죠)
알고윗미의 경우 클라이언트에서 코드를 수행할 때 무거운 연산을 수행하게 되면 메인스레드가 멈출 수 있습니다.