SharedArrayBuffer
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. Itโs been available across browsers since โจ2021๋ 12์โฉ.
* Some parts of this feature may have varying levels of support.
SharedArrayBuffer
๊ฐ์ฒด๋ ์ ๋ค๋ฆญ, ๊ณ ์ ๋ ๊ธธ์ด์ ์์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ ๋ฒํผ๋ฅผ ํํํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ArrayBuffer
๊ฐ์ฒด์ ์ ์ฌํ์ง๋ง, ๊ณต์ ๋ ๋ฉ๋ชจ๋ฆฌ์์ ๋ทฐ๋ฅผ ์์ฑํ๋๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ArrayBuffer
์๋ ๋ฌ๋ฆฌ, SharedArrayBuffer
๋ ๋ถ๋ฆฌ๋ ์ ์์ต๋๋ค.
์ฐธ๊ณ : Spectre ์๋ํ ์๋ต์ผ๋ก 2018๋ 1์ 5์ผ์
SharedArrayBuffer
๋ ๋ชจ๋ ์ฃผ์ ๋ธ๋ผ์ฐ์ ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋นํ์ฑํ๋์ด์์์ ์ฐธ๊ณ ํ์ธ์. Chrome ์ ์ฌ์ดํธ ๊ฒฉ๋ฆฌ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ Spectre ์คํ์ผ ์ทจ์ฝ์ ์ผ๋ก๋ถํฐ ๋ณดํธ๋ ์ ์๋ ํ๋ซํผ์์ v67 ์์ ์ด๋ฅผ ๋ค์ ํ์ฑํํ์์ต๋๋ค.
์๋ํด ๋ณด๊ธฐ
// Create a SharedArrayBuffer with a size in bytes
const buffer = new SharedArrayBuffer(8);
console.log(buffer.byteLength);
// Expected output: 8
๊ตฌ๋ฌธ
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
์ฐ์ฐ์๋ฅผ ํ์๋ก ํจ
SharedArrayBuffer
์์ฑ์๋ ์์ฑ๋ ๋, new
์ฐ์ฐ์๋ฅผ ํ์๋ก ํฉ๋๋ค. SharedArrayBuffer
์์ฑ์๋ฅผ new ์์ด ํจ์๋ก์จ ํธ์ถํ๋ฉด, TypeError
๋ฅผ ์ผ์ผํฌ ๊ฒ ์
๋๋ค.
var sab = SharedArrayBuffer(1024);
// TypeError: calling a builtin SharedArrayBuffer constructor
// without new is forbidden
var sab = new SharedArrayBuffer(1024);
์์ฑ
-
๊ฐ์ด 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ยฎ 2026 Language Specification # sec-sharedarraybuffer-objects |
๋ธ๋ผ์ฐ์ ํธํ์ฑ
Loadingโฆ
ํจ๊ป ๋ณด๊ธฐ
Atomics
ArrayBuffer
- JavaScript ํ์ํ ๋ฐฐ์ด
- Web Workers
- parlib-simple โ ๋๊ธฐํ ๋ฐ ์์ ๋ถ๋ฆฌ ์ถ์ํ๋ฅผ ์ ๊ณตํ๋ ๊ฐ๋จํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
- Shared Memory โ ๊ฐ๋จํ ํํ ๋ฆฌ์ผ
- A Taste of JavaScript's New Parallel Primitives โ Mozilla Hacks