--- id: wiki-2026-0508-multi-threaded-architecture title: Multi threaded Architecture category: 10_Wiki/Topics status: needs_review canonical_id: self aliases: [P-Reinforce-AUTO-4271F6] duplicate_of: none source_trust_level: A confidence_score: 0.9 tags: [auto-reinforced] raw_sources: [] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Multi-threaded [[Architecture|Architecture]]" inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08) tech_stack: language: unspecified framework: unspecified --- # [[Multi-threaded Architecture|Multi-threaded Architecture]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋‹จ์ผ ์Šค๋ ˆ๋“œ(Single-thread) ์ œ์•ฝ์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์›น ์›Œ์ปค(Web Worker)์™€ [[OffscreenCanvas|OffscreenCanvas]]๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฌด๊ฑฐ์šด CPU ์—ฐ์‚ฐ์ด๋‚˜ 3D ๊ทธ๋ž˜ํ”ฝ ๋ Œ๋”๋ง์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์™€ ๊ณ ํšจ์œจ๋กœ ์ƒํƒœ๋ฅผ ๋™๊ธฐํ™”ํ•˜์—ฌ ๋งค๋„๋Ÿฌ์šด ๋ฐ˜์‘์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์ง„๋ณด๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) **1. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์˜ ํ•„์š”์„ฑ๊ณผ Web Worker ๋ถ„๋ฆฌ** ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์ด๋ฏ€๋กœ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ •๋ ฌ, ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ, ๋ฌผ๋ฆฌ ์—ฐ์‚ฐ ๋“ฑ ๋ฌด๊ฑฐ์šด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ธ”๋กœํ‚น๋˜์–ด UI๊ฐ€ ๋ฉˆ์ถ”๋Š” ํ”„๋ฆฌ์ง•(Freezing) ํ˜„์ƒ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌด๊ฑฐ์šด ์—ฐ์‚ฐ์„ ์›น ์›Œ์ปค(Web Worker)๋กœ ์˜คํ”„๋กœ๋”ฉ(Offloading)ํ•˜๋ฉด, UI ์ƒํ˜ธ์ž‘์šฉ์€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ๋ฐฉํ•ด ์—†์ด ์ฒ˜๋ฆฌํ•˜๊ณ  ์—ฐ์‚ฐ์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์—์„œ ๋ณ‘๋ ฌ๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. React ์•ฑ์—์„œ๋Š” `@koale/useworker`์™€ ๊ฐ™์€ ํ›… ๊ธฐ๋ฐ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์›Œ์ปค ์„ค์ •์„ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. **2. OffscreenCanvas์™€ [[WebGL|WebGL]]/R3F ๋ Œ๋”๋ง ๋ถ„๋ฆฌ** ๋ณต์žกํ•œ 3D ์”ฌ์„ ๋‹ค๋ฃจ๋Š” WebGL ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ Three.js/React Three Fiber(R3F) ํ™˜๊ฒฝ์˜ ๊ฒฝ์šฐ ๋ Œ๋”๋ง ์—ฐ์‚ฐ ์ž์ฒด๊ฐ€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ์ž์›์„ ํฌ๊ฒŒ ์†Œ๋ชจํ•ฉ๋‹ˆ๋‹ค. `OffscreenCanvas`๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด DOM๊ณผ Canvas API๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์บ”๋ฒ„์Šค์˜ ์ œ์–ด๊ถŒ์„ ์›น ์›Œ์ปค๋กœ ๋„˜๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ตฌ์กฐ์—์„œ๋Š” ๋ Œ๋”๋ง๊ณผ DOM ์กฐ์ž‘์ด ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์„œ๋กœ์˜ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์œผ๋ฉฐ, ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์˜ ํŠธ๋ž˜ํ”ฝ(๊ณผ๋ถ€ํ•˜)๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ์›Œ์ปค์—์„œ ๋ถ€๋“œ๋Ÿฌ์šด ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋…๋ฆฝ์ ์œผ๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. **3. ๋Œ€๋ฆฌ ์ธํ„ฐ๋ž™์…˜(Event Forwarding) ์‹œ์Šคํ…œ** ์›น ์›Œ์ปค ๋‚ด๋ถ€์—๋Š” DOM์ด๋‚˜ `window` ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์‚ฌ์šฉ์ž์˜ ๋งˆ์šฐ์Šค ํด๋ฆญ, ํ„ฐ์น˜ ๋“ฑ์˜ ์ด๋ฒคํŠธ๋ฅผ ์ง์ ‘ ์ˆ˜์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์บก์ฒ˜ํ•œ ๋’ค, ์ด๋ฒคํŠธ์˜ ํƒ€์ž…๊ณผ ํฌ์ธํ„ฐ ์ขŒํ‘œ ๋“ฑ ํ•„์ˆ˜ ๋ฐ์ดํ„ฐ๋งŒ ์›Œ์ปค๋กœ ์ „๋‹ฌ(`postMessage`)ํ•˜์—ฌ ์›Œ์ปค ๋‚ด๋ถ€์—์„œ ์ƒํ˜ธ์ž‘์šฉ ๋ฐ ๋ ˆ์ด์บ์ŠคํŒ…([[Raycasting|Raycasting]])์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜๋Š” ์ด๋ฒคํŠธ ํฌ์›Œ๋”ฉ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. **4. ๊ณ ํšจ์œจ ์ƒํƒœ ๋™๊ธฐํ™” ([[State|State]] Synchronization)** ๋ฉ”์ธ ์Šค๋ ˆ๋“œ(React DOM UI)์™€ ์›Œ์ปค(WebGL ์”ฌ ๋˜๋Š” ์—ฐ์‚ฐ ๋กœ์ง) ์–‘์ชฝ์—์„œ ๋™์ผํ•œ ์•ฑ ์ƒํƒœ๋ฅผ ์ฝ๊ณ  ์จ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ์Šค๋ ˆ๋“œ ๊ฐ„ ์ƒํƒœ ๋™๊ธฐํ™”๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ณผ์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. - **ํ”„๋ก์‹œ ๋ฐ ๋ธํƒ€ ๋™๊ธฐํ™”:** Valtio์™€ ๊ฐ™์€ ํ”„๋ก์‹œ ๊ธฐ๋ฐ˜ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ๊ตฌ์ถ•ํ•œ ๋’ค, ์ƒํƒœ๊ฐ€ ๋ณ€ํ•  ๋•Œ๋งˆ๋‹ค ๋ณ€๊ฒฝ๋œ ์ž‘์—… ๋‚ด์šฉ([[Opera|Opera]]tions/Delta)๋งŒ `Broadcast Channel API`๋ฅผ ํ†ตํ•ด ์ƒ๋Œ€ ์Šค๋ ˆ๋“œ์— ์ „๋‹ฌํ•˜์—ฌ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. - **SharedArrayBuffer:** ์ง€์—ฐ ์‹œ๊ฐ„์ด ๊ทน๋„๋กœ ๋‚ฎ์•„์•ผ ํ•˜๋Š” ํ™˜๊ฒฝ์ด๋‚˜ ECS ๊ธฐ๋ฐ˜์˜ ๊ฒŒ์ž„์—์„œ๋Š” ๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง์ ‘ ๊ณต์œ ํ•˜๋Š” `SharedArrayBuffer`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง๋ ฌํ™”(Serialization) ๋ฐ ๋ณต์‚ฌ ๋น„์šฉ ์—†์ด ์›์ž์ (Atomic) ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & Updates) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Graphics & Performance ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[Web Worker (แ„‹แ…ฐแ†ธ แ„‹แ…ฏแ„แ…ฅ)|Web Worker (์›น ์›Œ์ปค]], [[OffscreenCanvas|OffscreenCanvas]], SharedArrayBuffer, ์ƒํƒœ ๊ด€๋ฆฌ ์ตœ์ ํ™” (Zustand, Jotai, Valtio) - **Projects/Contexts:** ๊ณ ์„ฑ๋Šฅ ์‹ค์‹œ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ React ๊ธฐ๋ฐ˜ ๊ฒŒ์ž„ ์—”์ง„ ์•„ํ‚คํ…์ฒ˜, ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ์‹œ๊ฐํ™” ๋Œ€์‹œ๋ณด๋“œ - **Contradictions/Notes:** ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์ด ๋ฌด์กฐ๊ฑด์ ์ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๊ฐ€์ ธ์˜ค์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์™€ ์›Œ์ปค ์Šค๋ ˆ๋“œ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ณผ์ •(`postMessage`)์—๋Š” ์ง๋ ฌํ™”๋กœ ์ธํ•œ ์˜ค๋ฒ„ํ—ค๋“œ(์•ฝ 5~10ms)๊ฐ€ ์ˆ˜๋ฐ˜๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์—ฐ์‚ฐ ์‹œ๊ฐ„์ด 50ms ๋ฏธ๋งŒ์ธ ๋น„๊ต์  ๊ฐ€๋ฒผ์šด ์ž‘์—…์„ ์›Œ์ปค๋กœ ๋ถ„๋ฆฌํ•˜๋ฉด, ํ†ต์‹  ๋น„์šฉ์ด ์—ฐ์‚ฐ ์‹œ๊ฐ„๋ณด๋‹ค ์ปค์ ธ ์˜คํžˆ๋ ค ์ „์ฒด ์„ฑ๋Šฅ์ด ํ•˜๋ฝํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฒ ์ €ํ•œ ํ”„๋กœํŒŒ์ผ๋ง์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณ‘๋ชฉ ๊ตฌ๊ฐ„์—๋งŒ ๋„์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. --- _Last updated: 2026-04-15_ --- ## ๐Ÿค– LLM ํ™œ์šฉ ํžŒํŠธ (How to Use This Knowledge) **์–ธ์ œ ์ด ์ง€์‹์„ ์“ฐ๋Š”๊ฐ€:** - *(TODO)* **์–ธ์ œ ์“ฐ๋ฉด ์•ˆ ๋˜๋Š”๊ฐ€:** - *(TODO)* ## ๐Ÿงช ๊ฒ€์ฆ ์ƒํƒœ (Validation) - **์ •๋ณด ์ƒํƒœ:** needs_review - **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** A - **๊ฒ€ํ†  ์ด์œ :** *(P-Reinforce Phase 1 ์ž๋™ ์ •๊ทœํ™”. ๋ณธ๋ฌธ ๊ฒ€์ฆ ํ•„์š”.)* ## ๐Ÿงฌ ์ค‘๋ณต ๊ฒ€์‚ฌ (Duplicate Check) - **๊ธฐ์กด ์œ ์‚ฌ ๋ฌธ์„œ:** *(TODO: ์ธ๋ฑ์„œ ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌํฌํŠธ ์ฐธ์กฐ)* - **์ฒ˜๋ฆฌ ๋ฐฉ์‹:** UPDATE (์ž๋™ ์ •๊ทœํ™”) - **์ฒ˜๋ฆฌ ์ด์œ :** Phase 1 ์ •๊ทœํ™” โ€” ์˜› ํ…œํ”Œ๋ฆฟ/๋ˆ„๋ฝ ํ•„๋“œ ๋ณด๊ฐ•. ## ๐Ÿ•“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Changelog) | ๋‚ ์งœ | ๋ณ€๊ฒฝ ๋‚ด์šฉ | ์ฒ˜๋ฆฌ ๋ฐฉ์‹ | ์‹ ๋ขฐ๋„ | |------|-----------|-----------|--------| | 2026-05-08 | P-Reinforce Phase 1 ์ •๊ทœํ™” (frontmatter + ํ—ค๋” ํ‘œ์ค€ํ™”) | UPDATE | A | ## ๐Ÿ’ป ์ฝ”๋“œ ํŒจํ„ด (Code Patterns) **ํŒจํ„ด 1:** *(TODO: ์ด ํ”„๋กœ์ ํŠธ ์ปจ๋ฒค์…˜ ๋ฐ˜์˜ํ•œ ๊ตฌ์กฐ ์Šค์ผˆ๋ ˆํ†ค)* ```text # TODO ``` ## ๐Ÿค” ์˜์‚ฌ๊ฒฐ์ • ๊ธฐ์ค€ (Decision Criteria) **์„ ํƒ A๋ฅผ ์จ์•ผ ํ•  ๋•Œ:** - *(TODO)* **์„ ํƒ B๋ฅผ ์จ์•ผ ํ•  ๋•Œ:** - *(TODO)* **๊ธฐ๋ณธ๊ฐ’:** > *(TODO)* ## โŒ ์•ˆํ‹ฐํŒจํ„ด (Anti-Patterns) - **[์•ˆํ‹ฐํŒจํ„ด]:** *(TODO: ๋ฌด์—‡์„ ํ•˜๋ฉด ์•ˆ ๋˜๋Š”๊ฐ€ + ์ด์œ  + ๋Œ€์‹  ๋ฌด์—‡์„)*