--- id: P-REINFORCE-AUTO-4271F6 category: "10_Wiki/๐Ÿ’ก Topics/Graphics & Performance" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Multi-threaded Architecture" --- # [[Multi-threaded Architecture|Multi-threaded Architecture]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋‹จ์ผ ์Šค๋ ˆ๋“œ(Single-thread) ์ œ์•ฝ์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์›น ์›Œ์ปค(Web Worker)์™€ OffscreenCanvas๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฌด๊ฑฐ์šด CPU ์—ฐ์‚ฐ์ด๋‚˜ 3D ๊ทธ๋ž˜ํ”ฝ ๋ Œ๋”๋ง์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์™€ ๊ณ ํšจ์œจ๋กœ ์ƒํƒœ๋ฅผ ๋™๊ธฐํ™”ํ•˜์—ฌ ๋งค๋„๋Ÿฌ์šด ๋ฐ˜์‘์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์ง„๋ณด๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) **1. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์˜ ํ•„์š”์„ฑ๊ณผ Web Worker ๋ถ„๋ฆฌ** ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์ด๋ฏ€๋กœ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ •๋ ฌ, ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ, ๋ฌผ๋ฆฌ ์—ฐ์‚ฐ ๋“ฑ ๋ฌด๊ฑฐ์šด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ธ”๋กœํ‚น๋˜์–ด UI๊ฐ€ ๋ฉˆ์ถ”๋Š” ํ”„๋ฆฌ์ง•(Freezing) ํ˜„์ƒ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌด๊ฑฐ์šด ์—ฐ์‚ฐ์„ ์›น ์›Œ์ปค(Web Worker)๋กœ ์˜คํ”„๋กœ๋”ฉ(Offloading)ํ•˜๋ฉด, UI ์ƒํ˜ธ์ž‘์šฉ์€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ๋ฐฉํ•ด ์—†์ด ์ฒ˜๋ฆฌํ•˜๊ณ  ์—ฐ์‚ฐ์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์—์„œ ๋ณ‘๋ ฌ๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. React ์•ฑ์—์„œ๋Š” `@koale/useworker`์™€ ๊ฐ™์€ ํ›… ๊ธฐ๋ฐ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์›Œ์ปค ์„ค์ •์„ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. **2. OffscreenCanvas์™€ WebGL/R3F ๋ Œ๋”๋ง ๋ถ„๋ฆฌ** ๋ณต์žกํ•œ 3D ์”ฌ์„ ๋‹ค๋ฃจ๋Š” WebGL ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ Three.js/React Three Fiber(R3F) ํ™˜๊ฒฝ์˜ ๊ฒฝ์šฐ ๋ Œ๋”๋ง ์—ฐ์‚ฐ ์ž์ฒด๊ฐ€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ์ž์›์„ ํฌ๊ฒŒ ์†Œ๋ชจํ•ฉ๋‹ˆ๋‹ค. `OffscreenCanvas`๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด DOM๊ณผ Canvas API๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์บ”๋ฒ„์Šค์˜ ์ œ์–ด๊ถŒ์„ ์›น ์›Œ์ปค๋กœ ๋„˜๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ตฌ์กฐ์—์„œ๋Š” ๋ Œ๋”๋ง๊ณผ DOM ์กฐ์ž‘์ด ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์„œ๋กœ์˜ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์œผ๋ฉฐ, ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์˜ ํŠธ๋ž˜ํ”ฝ(๊ณผ๋ถ€ํ•˜)๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ์›Œ์ปค์—์„œ ๋ถ€๋“œ๋Ÿฌ์šด ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋…๋ฆฝ์ ์œผ๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. **3. ๋Œ€๋ฆฌ ์ธํ„ฐ๋ž™์…˜(Event Forwarding) ์‹œ์Šคํ…œ** ์›น ์›Œ์ปค ๋‚ด๋ถ€์—๋Š” DOM์ด๋‚˜ `window` ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์‚ฌ์šฉ์ž์˜ ๋งˆ์šฐ์Šค ํด๋ฆญ, ํ„ฐ์น˜ ๋“ฑ์˜ ์ด๋ฒคํŠธ๋ฅผ ์ง์ ‘ ์ˆ˜์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์บก์ฒ˜ํ•œ ๋’ค, ์ด๋ฒคํŠธ์˜ ํƒ€์ž…๊ณผ ํฌ์ธํ„ฐ ์ขŒํ‘œ ๋“ฑ ํ•„์ˆ˜ ๋ฐ์ดํ„ฐ๋งŒ ์›Œ์ปค๋กœ ์ „๋‹ฌ(`postMessage`)ํ•˜์—ฌ ์›Œ์ปค ๋‚ด๋ถ€์—์„œ ์ƒํ˜ธ์ž‘์šฉ ๋ฐ ๋ ˆ์ด์บ์ŠคํŒ…(Raycasting)์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜๋Š” ์ด๋ฒคํŠธ ํฌ์›Œ๋”ฉ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. **4. ๊ณ ํšจ์œจ ์ƒํƒœ ๋™๊ธฐํ™” (State Synchronization)** ๋ฉ”์ธ ์Šค๋ ˆ๋“œ(React DOM UI)์™€ ์›Œ์ปค(WebGL ์”ฌ ๋˜๋Š” ์—ฐ์‚ฐ ๋กœ์ง) ์–‘์ชฝ์—์„œ ๋™์ผํ•œ ์•ฑ ์ƒํƒœ๋ฅผ ์ฝ๊ณ  ์จ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ์Šค๋ ˆ๋“œ ๊ฐ„ ์ƒํƒœ ๋™๊ธฐํ™”๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ณผ์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. - **ํ”„๋ก์‹œ ๋ฐ ๋ธํƒ€ ๋™๊ธฐํ™”:** Valtio์™€ ๊ฐ™์€ ํ”„๋ก์‹œ ๊ธฐ๋ฐ˜ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ๊ตฌ์ถ•ํ•œ ๋’ค, ์ƒํƒœ๊ฐ€ ๋ณ€ํ•  ๋•Œ๋งˆ๋‹ค ๋ณ€๊ฒฝ๋œ ์ž‘์—… ๋‚ด์šฉ(Operations/Delta)๋งŒ `Broadcast Channel API`๋ฅผ ํ†ตํ•ด ์ƒ๋Œ€ ์Šค๋ ˆ๋“œ์— ์ „๋‹ฌํ•˜์—ฌ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. - **SharedArrayBuffer:** ์ง€์—ฐ ์‹œ๊ฐ„์ด ๊ทน๋„๋กœ ๋‚ฎ์•„์•ผ ํ•˜๋Š” ํ™˜๊ฒฝ์ด๋‚˜ ECS ๊ธฐ๋ฐ˜์˜ ๊ฒŒ์ž„์—์„œ๋Š” ๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง์ ‘ ๊ณต์œ ํ•˜๋Š” `SharedArrayBuffer`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง๋ ฌํ™”(Serialization) ๋ฐ ๋ณต์‚ฌ ๋น„์šฉ ์—†์ด ์›์ž์ (Atomic) ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Graphics & Performance ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[Web Worker (แ„‹แ…ฐแ†ธ แ„‹แ…ฏแ„แ…ฅ)|Web Worker (์›น ์›Œ์ปค)]], [[OffscreenCanvas|OffscreenCanvas]], [[SharedArrayBuffer|SharedArrayBuffer]], [[แ„‰แ…กแ†ผแ„แ…ข แ„€แ…ชแ†ซแ„…แ…ต แ„Žแ…ฌแ„Œแ…ฅแ†จแ„’แ…ช (Zustand, Jotai, Valtio)|์ƒํƒœ ๊ด€๋ฆฌ ์ตœ์ ํ™” (Zustand, Jotai, Valtio)]] - **Projects/Contexts:** [[แ„€แ…ฉแ„‰แ…ฅแ†ผแ„‚แ…ณแ†ผ แ„‰แ…ตแ†ฏแ„‰แ…ตแ„€แ…กแ†ซ แ„‰แ…กแ†ผแ„’แ…ฉแ„Œแ…กแ†จแ„‹แ…ญแ†ผ แ„‰แ…ตแ„‰แ…ณแ„แ…ฆแ†ทแ„‹แ…ณแ†ฏ แ„‹แ…ฑแ„’แ…กแ†ซ React แ„€แ…ตแ„‡แ…กแ†ซ แ„€แ…ฆแ„‹แ…ตแ†ท แ„‹แ…ฆแ†ซแ„Œแ…ตแ†ซ แ„‹แ…กแ„แ…ตแ„แ…ฆแ†จแ„Žแ…ฅ|๊ณ ์„ฑ๋Šฅ ์‹ค์‹œ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ React ๊ธฐ๋ฐ˜ ๊ฒŒ์ž„ ์—”์ง„ ์•„ํ‚คํ…์ฒ˜]], ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ์‹œ๊ฐํ™” ๋Œ€์‹œ๋ณด๋“œ - **Contradictions/Notes:** ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์ด ๋ฌด์กฐ๊ฑด์ ์ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๊ฐ€์ ธ์˜ค์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์™€ ์›Œ์ปค ์Šค๋ ˆ๋“œ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ณผ์ •(`postMessage`)์—๋Š” ์ง๋ ฌํ™”๋กœ ์ธํ•œ ์˜ค๋ฒ„ํ—ค๋“œ(์•ฝ 5~10ms)๊ฐ€ ์ˆ˜๋ฐ˜๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์—ฐ์‚ฐ ์‹œ๊ฐ„์ด 50ms ๋ฏธ๋งŒ์ธ ๋น„๊ต์  ๊ฐ€๋ฒผ์šด ์ž‘์—…์„ ์›Œ์ปค๋กœ ๋ถ„๋ฆฌํ•˜๋ฉด, ํ†ต์‹  ๋น„์šฉ์ด ์—ฐ์‚ฐ ์‹œ๊ฐ„๋ณด๋‹ค ์ปค์ ธ ์˜คํžˆ๋ ค ์ „์ฒด ์„ฑ๋Šฅ์ด ํ•˜๋ฝํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฒ ์ €ํ•œ ํ”„๋กœํŒŒ์ผ๋ง์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณ‘๋ชฉ ๊ตฌ๊ฐ„์—๋งŒ ๋„์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. --- _Last updated: 2026-04-15_ - Raw Source: 00_Raw/2026-04-20/Multi-threaded Architecture.md ---