--- id: P-REINFORCE-AUTO-6AB6C6 category: "[[10_Wiki/๐Ÿ’ก Topics/Programming & Language]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - bitECS์™€ SharedArrayBuffer์˜ ์‹ค์ œ ์ฝ”๋“œ ํ†ตํ•ฉ" --- # [[bitECS์™€ SharedArrayBuffer์˜ ์‹ค์ œ ์ฝ”๋“œ ํ†ตํ•ฉ]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > `bitECS`์˜ ๋ฐ์ดํ„ฐ ์ง€ํ–ฅ ์ปดํฌ๋„ŒํŠธ(SoA) ๊ตฌ์กฐ์— ๊ธฐ๋ณธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์—ด ๋Œ€์‹  `SharedArrayBuffer` ๊ธฐ๋ฐ˜์˜ `TypedArray(Float32Array ๋“ฑ)`๋ฅผ ๋งคํ•‘ํ•˜์—ฌ, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋ณต์‚ฌ ์˜ค๋ฒ„ํ—ค๋“œ ์—†์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ๊ตฌํ˜„ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) **1. ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ๊ธฐ๋ฐ˜: TypedArray์™€ SoA(Structure of Arrays)** `bitECS`๋Š” ์—”ํ‹ฐํ‹ฐ์˜ ์ปดํฌ๋„ŒํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์—ฐ์†์ ์œผ๋กœ ๋ฐฐ์น˜ํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€์ ์œผ๋กœ `Float32Array`์™€ ๊ฐ™์€ ํƒ€์ž…ํ™”๋œ ๋ฐฐ์—ด(TypedArray)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ SoA ๋ฐฉ์‹์€ CPU ์บ์‹œ ํšจ์œจ์„ ๊ทน๋Œ€ํ™”ํ•˜์—ฌ ๊ณ ์„ฑ๋Šฅ ์—ฐ์‚ฐ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. **2. SharedArrayBuffer๋ฅผ ์ด์šฉํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต์œ  ์—ฐ๊ฒฐ** ์ผ๋ฐ˜์ ์ธ `TypedArray`๋Š” ๋‹จ์ผ ์Šค๋ ˆ๋“œ ๋ฉ”๋ชจ๋ฆฌ์— ์ข…์†๋˜์ง€๋งŒ, ๊ทธ ๊ธฐ๋ฐ˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ `SharedArrayBuffer`๋กœ ํ• ๋‹นํ•˜๋ฉด ์Šค๋ ˆ๋“œ ๊ฐ„ ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค. `bitECS` ์ปดํฌ๋„ŒํŠธ ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•  ๋•Œ, ์ด ๊ณต์œ  ๋ฒ„ํผ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ทฐ(View) ๋ฐฐ์—ด์„ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋‘ ๊ธฐ์ˆ ์„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. **3. ์‹ค์ œ ํ†ตํ•ฉ ์ฝ”๋“œ ์˜ˆ์‹œ** ์ œ๊ณต๋œ `bitECS` API ๊ตฌ์กฐ์— `SharedArrayBuffer` ๊ฐœ๋…์„ ๊ฒฐํ•ฉํ•œ ์‹ค์ œ ์—ฐ๊ฒฐ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ``` import { createWorld, addEntity, addComponent } from 'bitecs'; // 1. SharedArrayBuffer๋กœ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น (์˜ˆ: 10๋งŒ ๊ฐœ ์—”ํ‹ฐํ‹ฐ์šฉ, Float32๋Š” 4๋ฐ”์ดํŠธ) const MAX_ENTITIES = 100000; const bufferX = new SharedArrayBuffer(MAX_ENTITIES * 4); const bufferY = new SharedArrayBuffer(MAX_ENTITIES * 4); // 2. ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฐ”๋ผ๋ณด๋Š” TypedArray ๋ทฐ ์ƒ์„ฑ const sharedVelocityX = new Float32Array(bufferX); const sharedVelocityY = new Float32Array(bufferY); // 3. bitECS ์›”๋“œ ์ƒ์„ฑ ์‹œ ๊ณต์œ  ๋ฐฐ์—ด์„ ์ปดํฌ๋„ŒํŠธ ๋ฐ์ดํ„ฐ๋กœ ๋งคํ•‘ const world = createWorld({ components: { Velocity: { x: sharedVelocityX, y: sharedVelocityY } }, time: { delta: 0, elapsed: 0, then: performance.now() } }); const { Velocity } = world.components; // 4. ์—”ํ‹ฐํ‹ฐ ์ƒ์„ฑ ๋ฐ ๋ฐ์ดํ„ฐ ์“ฐ๊ธฐ (์ด ๋ฐ์ดํ„ฐ๋Š” ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์— ์ง์ ‘ ๊ธฐ๋ก๋จ) const eid = addEntity(world); addComponent(world, eid, Velocity); Velocity.x[eid] = 1.23; // ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์˜ 0๋ฒˆ ์ธ๋ฑ์Šค์— ๋ฐ์ดํ„ฐ ์“ฐ๊ธฐ Velocity.y[eid] = 1.23; // 5. ์›น ์›Œ์ปค๋กœ ๊ณต์œ  ๋ฒ„ํผ ์ „์†ก (์ง๋ ฌํ™” ์˜ค๋ฒ„ํ—ค๋“œ ์—†์ด ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋งŒ ๊ณต์œ ) // worker.postMessage({ bufferX, bufferY }); ``` **4. ์Šค๋ ˆ๋“œ ๊ฐ„ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ์›๋ฆฌ** ์œ„์™€ ๊ฐ™์ด ๊ตฌ์„ฑํ•œ ํ›„ `bufferX`, `bufferY`๋ฅผ ์›น ์›Œ์ปค๋กœ ์ „๋‹ฌํ•˜๋ฉด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์™€ ์›Œ์ปค ์Šค๋ ˆ๋“œ๋Š” ์™„๋ฒฝํ•˜๊ฒŒ ๋™์ผํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์›Œ์ปค ์Šค๋ ˆ๋“œ์—์„œ ๋ฌผ๋ฆฌ ์—ฐ์‚ฐ์„ ํ†ตํ•ด ๋ฐฐ์—ด์˜ `x, y` ์ธ๋ฑ์Šค ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•˜๋ฉด, ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” `postMessage`๋กœ ๋งค๋ฒˆ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ฒจ๋ฐ›์„ ํ•„์š” ์—†์ด `bitECS`์˜ `Velocity.x[eid]`๋ฅผ ํ†ตํ•ด ์ฆ‰์‹œ ๋ Œ๋”๋ง์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[Structure of Arrays (SoA)]], [[TypedArray (Float32Array)]], [[Web Worker postMessage ํ†ต์‹ ]], [[๋ฉ”๋ชจ๋ฆฌ ์ œ๋กœ ๋ณต์‚ฌ (Zero-Copy)]] - **Projects/Contexts:** [[๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜ ์›น ๊ฒŒ์ž„ ๋ฌผ๋ฆฌ ์—”์ง„ ๊ตฌํ˜„]], [[์ดˆ๋Œ€๊ทœ๋ชจ ํŒŒํ‹ฐํด ๋ฐ ์—”ํ‹ฐํ‹ฐ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ (React Three Fiber)]] - **Contradictions/Notes:** `bitECS`์™€ ๊ฐ™์€ ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์›์‹œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋กœ์šฐ ๋ ˆ๋ฒจ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด ๋ฐฐ์—ด(JS objects) ๋‹ค๋ฃจ๋“ฏ ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์ตœ์ ํ™”๋ฅผ ํ•˜๋”๋ผ๋„, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ฆ๊ฒจ ์‚ฌ์šฉํ•˜๋Š” ์œ ์—ฐํ•œ JSON ๊ตฌ์กฐ์˜ ๊ฐ์ฒด ๋ฐ์ดํ„ฐ ํฌ๋งท๊ณผ๋Š” ์—ฌ์ „ํžˆ ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฉ€๊ณ  ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ๊ฐ€ ๊ณ ์ •๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์„ค๊ณ„์  ์ œ์•ฝ์ด ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. --- _Last updated: 2026-04-14_ - Raw Source: [[00_Raw/2026-04-20/bitECS์™€ SharedArrayBuffer์˜ ์‹ค์ œ ์ฝ”๋“œ ํ†ตํ•ฉ.md]] ---