SharedArrayBuffer
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since December 2021.
SharedArrayBuffer
객체는 제네릭, 고정된 길이의 원시 바이너리 데이터 버퍼를 표현하는데 사용됩니다. ArrayBuffer
객체와 유사하지만, 공유된 메모리상의 뷰를 생성하는데 사용될 수 있습니다. ArrayBuffer
와는 달리, SharedArrayBuffer
는 분리될 수 없습니다.
참고: Spectre 에대한 응답으로 2018년 1월 5일에
SharedArrayBuffer
는 모든 주요 브라우저에서 기본적으로 비활성화되어있음을 참고하세요. Chrome 은 사이트 격리 기능을 사용하여 Spectre 스타일 취약점으로부터 보호될 수 있는 플랫폼상의 v67 에서 이를 다시 활성화하였습니다.
시도해보기
구문
new SharedArrayBuffer(length);
파라미터
length
-
생성할 array buffer 의 바이트 크기.
반환 값
크기가 지정된 새로운 SharedArrayBuffer
객체입니다. 컨텐츠는 0 으로 초기화됩니다.
설명
할당 및 메모리 공유
SharedArrayBuffer
객체를 사용해 메모리를 하나의 agent(agent 는 웹 페이지의 메인 프로그램 또는 웹 워커 중 하나입니다)와 다른 agent 에서 공유하기 위해, postMessage
와 structured cloning 이 사용됩니다.
Structured clone 알고리즘은 SharedArrayBuffer
와 SharedArrayBuffer
상에 맵핑된 TypedArray
를 받아들입니다. 이 두 경우에서, SharedArrayBuffer
객체는 수신자(receiver)에게 전달되어 수신 agent(예, ArrayBuffer
)의 새로운 비공개의 SharedArrayBuffer 객체를 생성합니다. 하지만, 두 SharedArrayBuffer
에 의해 참조되는 공유 데이터 블록은 같은 블록이며, 부수적인 효과로, 하나의 agent 가 다른 agent 에서 보이게 됩니다.
var sab = new SharedArrayBuffer(1024);
worker.postMessage(sab);
Atomic operation 으로 공유 메모리 수정 및 동기화
공유 메모리는 워커나 메인 스레드에서 동시에 수정 및 생성할 수 있습니다. 시스템(CPU, OS, 브라우저)에따라 변경사항이 전체 컨텍스트로 전파될때까지 약간의 시간이 필요합니다. 동기화를 위해선, atomic 연산이 필요합니다.
SharedArrayBuffer
객체를 사용할 수 있는 API
생성자는 new
연산자를 필요로 함
속성
-
값이 1인
SharedArrayBuffer
생성자의 length 속성입니다. -
모든
SharedArrayBuffer
객체에 프로퍼티 추가를 가능하게 해줍니다.
SharedArrayBuffer
prototype 객체
모든 SharedArrayBuffer
인스턴스는 SharedArrayBuffer.prototype
를 상속합니다.
속성
-
배열의 크기 (바이트)입니다. 이것은 배열이 구성 될 때 설정되며 변경할 수 없습니다. 읽기 전용입니다.
메소드
-
Returns a new
SharedArrayBuffer
whose contents are a copy of thisSharedArrayBuffer
's bytes frombegin
, inclusive, up toend
, exclusive.begin
또는end
중 하나가 음수이면 처음부터가 아니라 배열 끝의 인덱스를 참조합니다.
명세
Specification |
---|
ECMAScript Language Specification # sec-sharedarraybuffer-objects |
브라우저 호환성
BCD tables only load in the browser
함께 보기
Atomics
ArrayBuffer
- JavaScript 형식화 배열
- Web Workers
- parlib-simple – 동기화 및 작업 분리 추상화를 제공하는 간단한 라이브러리.
- Shared Memory – 간단한 튜토리얼
- A Taste of JavaScript's New Parallel Primitives – Mozilla Hacks