--- id: P-REINFORCE-AUTO-0A2C98 category: "10_Wiki/๐Ÿ’ก Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - SharedArrayBuffer์™€ Atomics ๊ตฌ์ฒด์  ํ™œ์šฉ๋ฒ•" --- # [[SharedArrayBufferแ„‹แ…ช Atomics แ„€แ…ฎแ„Žแ…ฆแ„Œแ…ฅแ†จ แ„’แ…ชแ†ฏแ„‹แ…ญแ†ผแ„‡แ…ฅแ†ธ|SharedArrayBuffer์™€ Atomics ๊ตฌ์ฒด์  ํ™œ์šฉ๋ฒ•]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > `SharedArrayBuffer`๋ฅผ ํ†ตํ•ด ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ์—์„œ ๊ณต์œ ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ๋•Œ ๋ฐ์ดํ„ฐ ๊ฒฝ์Ÿ(Data Race)์„ ๋ง‰๊ธฐ ์œ„ํ•ด, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋‚ด์žฅ ๊ฐ์ฒด์ธ `Atomics`์˜ ์ •์  ๋ฉ”์„œ๋“œ๋“ค์„ ํ™œ์šฉํ•˜์—ฌ ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๊ณ  ๋™๊ธฐํ™”ํ•˜๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) ์ œ๊ณต๋œ ์†Œ์Šค ์ž๋ฃŒ์—์„œ๋Š” `SharedArrayBuffer`๊ฐ€ ์Šค๋ ˆ๋“œ ๊ฐ„ ๋ณต์‚ฌ ๋น„์šฉ ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์›์ž์  ์—ฐ์‚ฐ(Atomic operations)์„ ์ง€์›ํ•˜์—ฌ ๊ณ ์„ฑ๋Šฅ ํ™˜๊ฒฝ์— ์ ํ•ฉํ•˜๋‹ค๋Š” ์ ์„ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. **๋‹ค๋งŒ ๊ตฌ์ฒด์ ์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ `Atomics` API์˜ ์‚ฌ์šฉ๋ฒ•์€ ์†Œ์Šค ์ž๋ฃŒ์— ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์•„, ์•„๋ž˜์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ• ๋ฐ ์ฝ”๋“œ๋Š” ์™ธ๋ถ€ ์ง€์‹์„ ๋ฐ”ํƒ•์œผ๋กœ ์„ค๋ช…ํ•ด ๋“œ๋ฆฝ๋‹ˆ๋‹ค.** **1. ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์™€ ๋ทฐ(View) ์ƒ์„ฑ** `SharedArrayBuffer`๋Š” ์›์‹œ ์ด์ง„ ๋ฐ์ดํ„ฐ์ด๋ฏ€๋กœ, ๊ฐ’์„ ์กฐ์ž‘ํ•˜๋ ค๋ฉด `Int32Array`์™€ ๊ฐ™์€ ํƒ€์ž…ํ™”๋œ ๋ฐฐ์—ด(TypedArray) ๋ทฐ๋ฅผ ์”Œ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ``` // ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์ƒ์„ฑ const buffer = new SharedArrayBuffer(1024); // 1024 ๋ฐ”์ดํŠธ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น const sharedArray = new Int32Array(buffer); // ์ดํ›„ ์ด buffer๋ฅผ ์›น ์›Œ์ปค๋กœ postMessage๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ``` **2. ์•ˆ์ „ํ•œ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ (`Atomics.store` & `Atomics.load`)** ์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ด ์ ‘๊ทผ ๋ฐฉ์‹(`sharedArray = 5`)์€ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์˜ ์ ‘๊ทผ๊ณผ ๊ฒน์น  ๊ฒฝ์šฐ ์•ˆ์ „ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ๊ณ  ์“ฐ๋Š” ์ž‘์—…์ด ์ค‘๋‹จ ์—†์ด ํ•œ ๋ฒˆ์˜ ์‚ฌ์ดํด ๋‚ด์— ์™„์ „ํžˆ ๋๋‚จ์„ ๋ณด์žฅํ•˜๋ ค๋ฉด `Atomics`๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ``` // ์“ฐ๊ธฐ (์˜ˆ: ์›Œ์ปค ์Šค๋ ˆ๋“œ์—์„œ ๋ฌผ๋ฆฌ ์—ฐ์‚ฐ ํ›„ ์ƒํƒœ ์—…๋ฐ์ดํŠธ) Atomics.store(sharedArray, 0, 123); // ์ธ๋ฑ์Šค 0์— 123์„ ์•ˆ์ „ํ•˜๊ฒŒ ๊ธฐ๋ก // ์ฝ๊ธฐ (์˜ˆ: ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ๋ Œ๋”๋ง์„ ์œ„ํ•ด ์ตœ์‹  ๊ฐ’ ์ฝ๊ธฐ) const value = Atomics.load(sharedArray, 0); ``` **3. ์›์ž์  ๋ฐ์ดํ„ฐ ๊ฐฑ์‹  (`Atomics.add`, `Atomics.sub`, `Atomics.exchange`)** ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ๊ฐ™์€ ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ์ฆ๊ฐ€์‹œ์ผœ์•ผ ํ•  ๋•Œ, ์ค‘๊ฐ„์— ๊ฐ’์„ ๊ฐ€๋กœ์ฑ„์–ด ์ƒ๊ธฐ๋Š” ๋ฎ์–ด์“ฐ๊ธฐ ์ถฉ๋Œ(Race Condition)์„ ์›์ฒœ์ ์œผ๋กœ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ``` // sharedArray์˜ ๊ฐ’์„ ์•ˆ์ „ํ•˜๊ฒŒ 1 ์ฆ๊ฐ€์‹œํ‚ด (๋ฐ˜ํ™˜๊ฐ’์€ ๋”ํ•˜๊ธฐ ์ „์˜ ์ด์ „ ๊ฐ’) Atomics.add(sharedArray, 1, 1); // ๊ฐ’์„ ์ง€์ •๋œ ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ ์ฆ‰์‹œ ๊ต์ฒด Atomics.exchange(sharedArray, 2, 99); ``` **4. ์Šค๋ ˆ๋“œ ๋™๊ธฐํ™”์™€ ๋ฝ ๋ฉ”์ปค๋‹ˆ์ฆ˜ (`Atomics.wait` & `Atomics.notify`)** ํŠน์ • ์Šค๋ ˆ๋“œ๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ๊ฐ€ ํŠน์ • ์ƒํƒœ๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ(๋ธ”๋กœํ‚น)ํ•˜๋„๋ก ๋งŒ๋“ค๊ณ , ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž‘์—…์„ ์™„๋ฃŒํ•˜๋ฉด ๋Œ€๊ธฐ ์ค‘์ธ ์Šค๋ ˆ๋“œ๋ฅผ ๊นจ์šฐ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. (์ฃผ์˜: ๋ธŒ๋ผ์šฐ์ € UI ๋ฉˆ์ถค์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ๋Š” `wait` ํ˜ธ์ถœ์ด ๊ธˆ์ง€๋˜์–ด ์žˆ์œผ๋ฉฐ ์ฃผ๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์›Œ์ปค ์Šค๋ ˆ๋“œ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.) ``` // ์›Œ์ปค ์Šค๋ ˆ๋“œ A (๋Œ€๊ธฐ) // sharedArray์˜ ๊ฐ’์ด 0์ด๋ฉด ๋Œ€๊ธฐ ๋ชจ๋“œ ์ง„์ž…. ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ๊นจ์›Œ์ค„ ๋•Œ๊นŒ์ง€ ๋ฉˆ์ถค. Atomics.wait(sharedArray, 3, 0); // ์›Œ์ปค ์Šค๋ ˆ๋“œ B (์‹คํ–‰ ์™„๋ฃŒ ํ›„ ๊นจ์šฐ๊ธฐ) Atomics.store(sharedArray, 3, 1); // ๊ฐ’์„ 1๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์ƒํƒœ ์—…๋ฐ์ดํŠธ Atomics.notify(sharedArray, 3, 1); // ์ธ๋ฑ์Šค 3์—์„œ ๋Œ€๊ธฐ ์ค‘์ธ ์Šค๋ ˆ๋“œ 1๊ฐœ๋ฅผ ๊นจ์›€ ``` ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[SharedArrayBuffer|SharedArrayBuffer]], [[Web Worker (แ„‹แ…ฐแ†ธ แ„‹แ…ฏแ„แ…ฅ)|Web Worker]], Data Race (๋ฐ์ดํ„ฐ ๊ฒฝ์Ÿ), Lock / Mutex ๋™๊ธฐํ™” ํŒจํ„ด - **Projects/Contexts:** ๊ณ ์„ฑ๋Šฅ ์‹ค์‹œ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ ์‹œ์Šคํ…œ, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ React ๊ฒŒ์ž„ ์—”์ง„ ์•„ํ‚คํ…์ฒ˜ - **Contradictions/Notes:** `SharedArrayBuffer`์™€ `Atomics`๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ณต์‚ฌ๋ฅผ ์—†์•  ์ง€์—ฐ ์‹œ๊ฐ„์„ ๊ทน๋„๋กœ ๋‚ฎ์ถ”๋Š” ์ตœ์ ์˜ ์ˆ˜๋‹จ์ด์ง€๋งŒ, ์›์‹œ ์ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ œ์–ดํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ตฌํ˜„ ๋‚œ์ด๋„๊ฐ€ ๋งค์šฐ ๋†’์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค๋ฌด์—์„œ๋Š” ๊ฐœ๋ฐœ ํŽธ์˜์„ฑ์„ ์œ„ํ•ด ์ง๋ ฌํ™” ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์–ด๋А ์ •๋„ ๊ฐ์ˆ˜ํ•˜๋”๋ผ๋„ `Valtio` ๊ฐ™์€ ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ํ†ตํ•œ ๋ฉ”์‹œ์ง€ ํŒจ์‹ฑ ๋ฐฉ์‹์„ ์„ ํƒํ•˜๊ฑฐ๋‚˜, ์ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ƒํ™”ํ•ด ๋‘” `bitECS` ๊ฐ™์€ ๊ณ ์„ฑ๋Šฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. --- _Last updated: 2026-04-14_ - Raw Source: 00_Raw/2026-04-20/SharedArrayBuffer์™€ Atomics ๊ตฌ์ฒด์  ํ™œ์šฉ๋ฒ•.md ---