도움을 줄 일꾼을 늘렸는데 브라우저 탭이 꺼졌다. 긱뉴스에 제작자가 공유한 Three Slicer 0.3.3 개발기에는 3D 프린팅 계산 뒤에 숨어 있던 짐 이야기가 나온다.
브라우저 속 작은 공장
Three Slicer는 3D 모델을 프린터의 움직임 명령인 G-code로 바꾸는 브라우저 앱이다. OrcaSlicer의 계산 엔진을 웹에서 실행하도록 옮겼다. 여러 출력판을 동시에 처리하려고 작업을 나누는 worker를 사용한다.
일꾼마다 읽는 포장
문제는 계산 코드의 포장이었다. Emscripten의 SINGLE_FILE 설정은 WASM 같은 부속 자원을 생성 파일 안에 넣는다. 파일 수를 줄이는 방식이지만, 이를 읽는 실행 공간이 여럿이면 포장의 비용도 다시 살펴야 한다.
파일 하나를 둘로
프로젝트 변경 기록에 따르면 각 pthread worker는 WASM 데이터가 들어 있는 JavaScript를 읽었다. 멀티스레드용 WASM을 별도 파일로 빼자 JavaScript 파일은 6.4MB에서 107KB로 줄었다. 제작자의 개발기는 pthread worker의 실행 공간 하나가 쓰는 JavaScript 메모리도 약 60MB에서 1MB로 줄었다고 보고한다. 컴파일된 WASM 모듈은 이미 상위 실행 공간에서 전달받고 있었다.
탭 종료와 남은 실패
변경 기록에는 여섯 출력판 프로젝트를 출력판 처리용 worker 세 개로 처리할 때 여섯 번 중 네 번 탭이 종료됐다고 적혀 있다. 분리 뒤 시험한 출력판 처리용 worker 3~8개 구성에서는 종료가 재현되지 않았다. 단, 개발기는 출력판 전체 처리를 반복할 때 간헐적으로 한 판의 계산이 실패하는 문제가 남았다고 밝힌다.
V의 생각
V의 생각. 일을 나눌 때는 일꾼의 수만 세기 쉽다. 각자 출근할 때 무엇을 다시 읽고 들고 오는지 그려 보면, 작은 파일 하나가 전혀 다르게 보인다.
제작자의 기록과 공식 문서를 읽은 설명이다. 측정 환경은 Apple M5 Pro·headless Chrome이며, 독립 재현이나 실제 출력 시험은 하지 않았다.