Device-dependent Main Threads
- 개발자가 짠 코드로 프로그램을 돌릴 때 메인 쓰레드로 돌아가게 된다.
(운전을 할 때 빠르게 가려고 Main road로 달리는 것과 같은 개념)
- 하지만 예전 기기를 사용하는 사용자들을 위해 프로그램을 만들어야한다.
- 웹페이지에서 일어나는 모든 클라이언트 동작은 메인쓰레드에서 일어나야한다.
- 기능이 늘어날 수록 메인 쓰레드가 일을 할 수 있는 한계치가 넘어가게 되면서 일부 기기에서 웹페이지를 편하게 사용하지 못하게 될 수가 있다.
- 자바스크립트 자체가 싱글 쓰레드로 작동하기때문에 다른 방법으로 어떻게 이 문제를 해결할 것인가? Web Worker!
Web Worker
- 쓰레드 위에 패턴을 생성하여 평행 상태로 작동하게 한다.
- Task, Schedule을 생성한다.
- 메인 쓰레드가 하는 일 중 일부는 따로 빼둘 수 있다.
Comlink
- 메인 쓰레드와 Web Worker의 Variable을 공유할 수 있다.
Off-Main-Thread
- React + Redux + Comlink
- State을 관리해서 같은 양의 일중 무게가 있는 걸 빼서 다른 쓰레드에게 넘겨준다.
- 장점: 메인쓰레드가 좀더 자유로워져서 중요한 일을 하게되어 사용자 입장에서는 좋을 수 있다.
- 단점: 쓰레드간 커뮤니케이션으로 속도 자체는 느려질 수 있다.
Structured cloning
- 특정 값을 Web Worker에서 메인 쓰레드로 복사하는 작업
- JSON 기준으로 10kb이하로 사용하면 크게 문제되지 않는다. (꽤 많은 일을 할 수 있음)
- 문제가 있다면... 다른 방법으로 접근할 수 있다.
- - 1. Transferring array buffers
- - 2. Using Shared Array Buffers in Atomic
- - 3. WebAssembly
Resources
- The main thread is overworked & underpaid (Chrome Dev Summit 2019)