Bun, 자바스크립트코어(JavaScriptCore)에 공유 메모리 스레드를 추가하는 PR 제출

Bun의 개발사 Oven의 Jarred Sumner가 자바스크립트코어(JavaScriptCore)에 동일한 힙과 객체를 직접 공유하는 '공유 메모리 스레드(Shared-memory threads)' 추가 풀 리퀘스트(PR)를 제출했습니다. 이 기술은 전역 락(Global Lock) 없이 JIT 컴파일러의 4개 계층 전체에서 병렬 자바스크립트를 실행하며, 복잡한 데이터 복사나 메시지 전송 없이 'new Thread()'로 다른 코어에서 함수를 즉시 구동합니다. 현재 스레드 테스트 모음은 통과했으나, 벤치마크 초과 해결 및 퍼징(Fuzzing) 등 안정성 검증 과제가 남아있어 실제 머지 여부는 미정입니다.

AI 요약

자바스크립트 런타임 'Bun'의 개발사인 Oven의 창립자 자레드 서머너(Jarred Sumner)가 웹킷(WebKit)의 자바스크립트 엔진인 '자바스크립트코어(JavaScriptCore, JSC)'에 공유 메모리 스레드를 추가하는 혁신적인 풀 리퀘스트(PR)를 제출했습니다. 이번 제안의 핵심은 기존 웹 워커(Web Worker)의 한계를 극복하고, 별도의 메시지 전송(Message Passing)이나 구조화된 복제(Structured Clone) 없이 동일한 힙(Heap) 메모리 내에서 객체를 직접 공유하는 new Thread(fn) API의 도입입니다. 이 기술은 글로벌 락(Global Lock) 없이 4단계의 JIT 컴파일러 레이어 전체에서 자바스크립트를 병렬로 실행할 수 있게 하며, 현재 관련 테스트 스위트를 통과한 상태입니다. 개발자는 복잡한 번들러 설정이나 블롭(Blob) URL 생성 없이, 외부 변수나 임포트된 모듈을 그대로 참조하는 실제 '클로저(Closure)'를 다른 스레드에서 직접 실행할 수 있습니다. 비록 아직 상용화 전 단계이고 웹킷 메인스트림에 최종 병합되지 않을 가능성도 존재하지만, 이 시도는 자바스크립트의 고성능 멀티스레딩 프로그래밍 패러다임을 완전히 바꿀 수 있는 잠재력을 지니고 있습니다.

핵심 인사이트

  • 자레드 서머너(Jarred Sumner)의 제안 (2026년 6월 6일): Bun의 제작자인 자레드 서머너가 WebKit 공식 포크 저장소(oven-sh/WebKit)에 자바스크립트코어(JSC) 성능 향상을 위한 공유 메모리 스레드 지원 PR을 제출했습니다.
  • 글로벌 락 없는 병렬 실행: 4개의 모든 JIT(Just-In-Time) 컴파일러 티어에서 글로벌 락(Global Lock) 없이 병렬로 자바스크립트가 실행되는 아키텍처를 구현했습니다.
  • 동일 힙(Heap) 내 객체 공유: 기존 SharedArrayBuffer 방식의 한계를 넘어, 데이터 복사나 직렬화 과정 없이 하나의 힙 메모리 안에서 객체를 직접 공유하여 통신 비용을 제로화합니다.
  • 진정한 클로저(Closure) 스레딩: 다른 코어(Core)에서 실행되는 스레드 함수가 자신이 선언된 스코프의 변수, 클래스, 임포트된 모듈을 그대로 인지하고 참조할 수 있습니다.

주요 디테일

  • 단순하고 강력한 API 디자인: const t = new Thread(fn, x, y) 형태로 호출하며, 동기식 대기를 위한 t.join()과 비동기 프라미스 반환을 위한 await t.asyncJoin()을 지원합니다. 호출된 스레드에서 발생한 에러는 실제 에러 객체와 스택 트레이스를 그대로 호출 스레드로 재던집니다(Rethrow).
  • 원자적 연산(Atomics) 지원: 일반 자바스크립트 객체의 프로퍼티에 원자적 연산을 수행할 수 있어, 다중 스레드가 동기화 문제없이 안전하게 카운터(Atomics.add(next, "i", 1)) 등을 조작하며 데이터를 처리할 수 있습니다.
  • 개발자 경험(DX)의 혁신적 개선: 코드를 문자열로 변환해 임시 Blob으로 만들고 onmessage 이벤트 핸들러를 덕테이프로 붙여야 했던 기존 웹 워커(Web Worker)의 번거롭고 깨지기 쉬운 우회 로직을 완벽히 대체합니다.
  • 아직 해결해야 할 기술적 과제: 현재 스레드 테스트 스위트는 통과했으나, 스레드 새니타이저(Thread-sanitizer) 정리, 퍼징(Fuzzing) 테스트 수행, 특정 벤치마크 오버헤드 해결 및 장기 안정성 검증(Soak Test) 단계가 남아 있습니다.
  • 하위 호환성 유지: 공유 스레드 기능이 비활성화되거나 락이 걸린 폴백(Fallback) 모드 환경에서도 기존 시스템이 문제없이 검증되고 작동하도록 설계되었습니다.

향후 전망

  • 자바스크립트 고성능 연산의 대중화: 이미지/비디오 처리, 인공지능(AI) 추론, 대규모 데이터 트랜스포메이션 등 복잡한 CPU 집약적 연산을 브라우저와 서버 자바스크립트 환경에서 네이티브 언어(C++, Rust 등) 수준의 효율로 작성할 수 있게 될 것입니다.
  • 엔진 진화 압박 및 웹 표준 변화 유도: 만약 이 기술이 WebKit 생태계에 성공적으로 안착한다면, 구글 V8(Node.js, Chrome) 및 모질라 스파이더몽키(Firefox) 진영 역시 진정한 멀티스레딩 지원을 위한 아키텍처 개편 압박을 강하게 받게 될 것입니다.
Share

이것도 읽어보세요

댓글

이 소식에 대한 의견을 자유롭게 남겨주세요.

댓글 (0)

불러오는 중...