Notice
Recent Posts
Recent Comments
Link
๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋ก์ „์ฒด ๊ธ€ (1099)

KoreanFoodie's Study

[C++ ๊ฒŒ์ž„ ์„œ๋ฒ„] 1-17, 18, 19. Lock-Free Stack

[C++ ๊ฒŒ์ž„ ์„œ๋ฒ„] 1-17, 18, 19. Lock-Free Stack ํ•ต์‹ฌ : 1. Lock-Free Stack ์€ ๋ฝ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ Stack ์— ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ œ๋Œ€๋กœ Push/Pop ์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. popCount ๋‚˜ ์ฐธ์กฐ๊ถŒ/์†Œ์œ ๊ถŒ ๊ฐœ๋…์„ ํ™œ์šฉํ•ด ์ด๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. 2. Lock-Free Stack ์€ ์‹ค์ œ๋กœ ํ™œ์šฉํ•˜๊ธฐ์—๋Š” ๊นŒ๋‹ค๋กœ์šฐ๋ฉฐ, Lock ๊ธฐ๋ฐ˜์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋ณด๋‹ค ๋” ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ด๋ผ๊ณ  ์žฅ๋‹ดํ•  ์ˆ˜ ์—†๋‹ค. ๊ฒฐ๊ตญ ๊ฒฝํ•ฉ์ด ์ผ์–ด๋‚ฌ์„ ๋•Œ, ์‹ค์งˆ์ ์œผ๋กœ ์‚ญ์ œ๋ฅผ ํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๋Š” 1๊ฐœ์ด์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 3. compare_exchange_weak ์€ compare_exchange_strong ๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ, spurious fail ์ด ์ผ์–ด๋‚  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. ๊ทธ sp..

Game Dev/Game Server 2023. 7. 26. 18:58
[C++ ๊ฒŒ์ž„ ์„œ๋ฒ„] 1-16. Lock-Based Stack/Queue

[C++ ๊ฒŒ์ž„ ์„œ๋ฒ„] 1-16. Lock-Based Stack/Queue ํ•ต์‹ฌ : 1. Lock-Based Queue/Stack ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜๋ฉด, ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ํ•ด๋‹น ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•  ๋•Œ ๋ถˆํ•„์š”ํ•œ Lock ์„ ์ถ”๊ฐ€๋กœ ์žก์„ ํ•„์š”๊ฐ€ ์—†์ด, ์‹ฑ๊ธ€์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ์ฒ˜๋Ÿผ Push/Pop ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 2. Push/Pop ํ•จ์ˆ˜ ๋‚ด๋ถ€์ ์œผ๋กœ lock_guard ๋ฅผ ์žก์•„์ฃผ๋ฉด ๋œ๋‹ค. 3. WaitPop ์˜ ๊ฒฝ์šฐ, Condition Variable ์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค. Queue ๋‚˜ Stack ๊ฐ™์€ ์ž๋ฃŒ๊ตฌ์กฐ์— ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด์ž. ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด ๊ฒƒ์„ ์‘์šฉํ•˜๋ฉด, ๊ฐ ์“ฐ๋ ˆ๋“œ๊ฐ€ ํŠน์ • ์ž๋ฃŒ๊ตฌ์กฐ์— ์ ‘๊ทผํ•  ๋•Œ๋งˆ๋‹ค ๋ฝ์„ ๊ฑธ๊ณ  ํ’€๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ•ด์•ผ ํ•˜๊ฒ ์ง€๋งŒ... ์ด๋Š” ์‚ฌ์‹ค ๋งค์šฐ ๊ท€์ฐฎ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ƒฅ ..

Game Dev/Game Server 2023. 7. 25. 11:29
[C++ ๊ฒŒ์ž„ ์„œ๋ฒ„] 1-15. Thread Local Storage

[C++ ๊ฒŒ์ž„ ์„œ๋ฒ„] 1-15. Thread Local Storage ํ•ต์‹ฌ : 1. Thread Local Storage(TLS) ๋Š”, ์“ฐ๋ ˆ๋“œ ๋ณ„๋กœ ํ• ๋‹น๋œ ๋…๋ฆฝ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์˜๋ฏธํ•œ๋‹ค. 2. TLS ๋ฅผ ์ด์šฉํ•˜๋ฉด, ๊ฐ ์“ฐ๋ ˆ๋“œ๋ณ„๋กœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•Œ ํž™์ด๋‚˜ ๋ฐ์ดํ„ฐ ์˜์—ญ์—์„œ ๋ณ„๋„์˜ ๋ณ€์ˆ˜ ์„ ์–ธ ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์–ด ๋ถˆํ•„์š”ํ•œ Race Condition ์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค. 3. TLS ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ ์˜์กด์ ์œผ๋กœ ์„ ์–ธํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, C++ ์—์„œ๋Š” ์ด์ œ ์–ธ์–ด ํ‘œ์ค€์—์„œ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. Thread Local Storage ๋ž€, ์“ฐ๋ ˆ๋ณ„๋กœ ๋…๋ฆฝ๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์˜๋ฏธํ•œ๋‹ค. ์Šคํƒ์€ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋ณ„๋„์˜ stack ์˜์—ญ์ด ์กด์žฌํ•˜๊ณ , Heap ๊ณผ ๋ฐ์ดํ„ฐ ์˜์—ญ์„ ๊ณต์œ ํ•˜๋Š”๋ฐ... TLS ์˜ ๊ฒฝ์šฐ, ๊ฐ ์“ฐ๋ ˆ๋“œ๋ณ„..

Game Dev/Game Server 2023. 7. 24. 17:24
[C++ ๊ฒŒ์ž„ ์„œ๋ฒ„] 1-14. ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ (atomic, ์ฝ”๋“œ ์žฌ๋ฐฐ์น˜)

[C++ ๊ฒŒ์ž„ ์„œ๋ฒ„] 1-14. ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ (atomic, ์ฝ”๋“œ ์žฌ๋ฐฐ์น˜) ํ•ต์‹ฌ : 1. atomic ์—ฐ์‚ฐ์ด๋ž€, ๋ง ๊ทธ๋Œ€๋กœ ํ•ด๋‹น ์—ฐ์‚ฐ์ด '์›์ž์ '์œผ๋กœ ์ˆ˜ํ–‰๋œ๋‹ค๋Š” ๋œป์ด๋‹ค. '์›์ž์ ' ์ด๋ผ๋Š” ๊ฒƒ์€, ํ•ด๋‹น ์—ฐ์‚ฐ ์‚ฌ์ด์— ๋‹ค๋ฅธ ์—ฐ์‚ฐ์ด ๋ผ์–ด๋“ค์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. 2. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์—ฌ๋Ÿฌ ์ด์œ (์ฃผ๋กœ ์ตœ์ ํ™”)๋กœ ์ฝ”๋“œ๋ฅผ ์žฌ๋ฐฐ์น˜ํ•˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ memory order ๋Š” ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๋“ค์ด '์ˆ˜์ • ์ˆœ์„œ' ์— ๋™์˜ํ•œ๋‹ค๋Š” ์›์น™์„ ์ง€์ผœ์•ผ ํ•œ๋‹ค. 3. ๋Œ€ํ‘œ์ ์œผ๋กœ ๋‹ค์Œ ์„ธ ๊ฐ€์ง€์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ ์˜ต์…˜์ด ์žˆ๋‹ค : memory_order_relaxed, memory_order_release, memory_order_seq_cst ์›์ž์  ์—ฐ์‚ฐ์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ? ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์›์ž์  ์—ฐ์‚ฐ์„ ๋งˆ์น˜ ์ผ์‹œ์ ์œผ๋กœ ๋ฝ์„ ๊ฑด๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ, ์ •ํ™•..

Game Dev/Game Server 2023. 7. 21. 19:08
[C++ ๊ฒŒ์ž„ ์„œ๋ฒ„] 1-13. CPU ํŒŒ์ดํ”„๋ผ์ธ (feat. ์ฝ”๋“œ ์žฌ๋ฐฐ์น˜)

[C++ ๊ฒŒ์ž„ ์„œ๋ฒ„] 1-13. CPU ํŒŒ์ดํ”„๋ผ์ธ (feat. ์ฝ”๋“œ ์žฌ๋ฐฐ์น˜) ํ•ต์‹ฌ : 1. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ๊ณผ์ •์—์„œ ์ฝ”๋“œ ์žฌ๋ฐฐ์น˜๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์˜๋„์น˜ ์•Š์€ ๊ฒฐ๊ณผ๊ฐ€ ๋„์ถœ๋  ์ˆ˜ ์žˆ๋‹ค. 2. CPU ํŒŒ์ดํ”„๋ผ์ธ์€ CPU ๊ฐ€ ๋ช…๋ น์–ด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ•˜๊ธฐ ์œ„ํ•œ ์‹œ์Šคํ…œ์ด๋‹ค. CPU ํŒŒ์ดํ”„๋ผ์ธ์— ๋Œ€ํ•ด ๊ณต๋ถ€๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด, ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž„์˜๋กœ ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋ฅผ ์žฌ๋ฐฐ์น˜ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ์—์„œ๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ๋กœ์ง์ด ์‹คํ–‰๋จ์ด ๋ณด์žฅ๋˜์ง€๋งŒ, ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ์—์„œ๋Š” ๊ผญ ์˜๋„๋Œ€๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ž‘ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š”๋ฐ... ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋ณด์ž. volatile bool ready = false; // ๊ฐ€์‹œ์„ฑ, ์ฝ”๋“œ ์žฌ๋ฐฐ์น˜ int32 x = 0; int32 y = 0; int32 r1 = 0;..

Game Dev/Game Server 2023. 7. 19. 20:30
[C++ ๊ฒŒ์ž„ ์„œ๋ฒ„] 1-12. ์บ์‹œ (Temporal Locality, Spatial Locality)

[C++ ๊ฒŒ์ž„ ์„œ๋ฒ„] 1-12. ์บ์‹œ (Temporal Locality, Spatial Locality) ํ•ต์‹ฌ : 1. RAM ์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ, ์ž์ฃผ ์“ฐ์ผ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์บ์‹œ์— ์ €์žฅ๋œ๋‹ค 2. ์บ์‹ฑ ์ฒ ํ•™์—๋Š” Temporal Locality ์™€ Spatial Locality ๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ฐ๊ฐ '์ตœ๊ทผ์— ์‚ฌ์šฉ๋œ ๋…€์„์€ ๋‹ค์‹œ ์‚ฌ์šฉ๋  ํ™•๋ฅ ์ด ๋†’๋‹ค' , '๋ฉ”๋ชจ๋ฆฌ์ƒ์œผ๋กœ ๊ฐ€๊นŒ์ด ์žˆ๋Š” ๋…€์„์€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋  ํ™•๋ฅ ์ด ๋†’๋‹ค' ๋ผ๋Š” ์ถ”๋ก ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค. 3. ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์กฐํšŒ๋ฅผ ํ•  ๋•Œ๋Š” ์œ„์˜ Temporal Locality ์™€ Spatial Locality ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์„ค๊ณ„๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ํ”ํžˆ ์šฐ๋ฆฌ๋Š” ์บ์‹œ๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ์กฐํšŒํ•  ๋•Œ, ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ์–ป์–ด์˜ฌ ๊ฒƒ์ด๋ผ๊ณ  ๊ธฐ๋Œ€ํ•˜์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ๊ทธ๋ ‡์ง€ ์•Š๋‹ค..

Game Dev/Game Server 2023. 7. 19. 16:35
[C++ ๊ฒŒ์ž„ ์„œ๋ฒ„] 1-11. future, promise, packaged_task

[C++ ๊ฒŒ์ž„ ์„œ๋ฒ„] 1-11. future, promise, packaged_task ํ•ต์‹ฌ : 1. future, promise, packaged_task ๋Š” ๋‹จ๋ฐœ์„ฑ ์ด๋ฒคํŠธ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค. 2. ์„ธ ๋…€์„์˜ ์ฐจ์ด๋Š” Level of Control ์— ๋‹ฌ๋ ค ์žˆ๋‹ค. future ๋Š” ํŠน์ • ํ•จ์ˆ˜์˜ ์ž‘์—…์„ ๋งก๊ธฐ๊ณ , packaged_task ๋Š” ์ž‘์—…์„ ๋งŒ๋“  ๋‹ค์Œ, ์“ฐ๋ ˆ๋“œ์— ์ด๋ฅผ ์‹ค์–ด ๋ณด๋‚ธ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ, promise ๋Š” ์ž‘์—…์„ ์‹ค์–ด ๋ณด๋‚ด๋ฉด์„œ, ๋™์‹œ์— ์‹ค์–ด ๋ณด๋‚ด๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ future ์— ๋„˜๊ธธ ๊ฐ’์„ ์ปค์Šคํ…€ํ•˜๊ฒŒ ์„ธํŒ…ํ•  ์ˆ˜ ์žˆ๋‹ค. 3. '๋น„๋™๊ธฐ์ '์ธ ์ž‘์—…๊ณผ '๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ' ๋Š” ๋‹ค๋ฅธ ์˜๋ฏธ์ด๋‹ค. ์–ด๋–ค ์ž‘์—…์ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค๊ณ  ํ•ด์„œ, ๊ผญ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ๋ฅผ ์ด์šฉํ•  ํ•„์š”๋Š” ์—†๋‹ค. ์‚ฌ์‹ค ์ž์ฃผ ์“ฐ์ด๋Š” ๋…€์„๋“ค์€..

Game Dev/Game Server 2023. 7. 18. 16:32
[C++ ๊ฒŒ์ž„ ์„œ๋ฒ„] 1-10. Condition Variable (์กฐ๊ฑด ๋ณ€์ˆ˜)

[C++ ๊ฒŒ์ž„ ์„œ๋ฒ„] 1-10. Condition Variable (์กฐ๊ฑด ๋ณ€์ˆ˜) ํ•ต์‹ฌ : 1. ์กฐ๊ฑด ๋ณ€์ˆ˜(Condition Variable) ์€ ์œ ์ € ๋ ˆ๋ฒจ ์˜ค๋ธŒ์ ํŠธ๋กœ, ๋™์ผํ•œ ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค. 2. ์กฐ๊ฑด ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ ํ˜น์€ ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ์— ์‹œ๊ทธ๋„์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. 3. ์กฐ๊ฑด ๋ณ€์ˆ˜๋Š” Lock ๊ณผ ํŽ˜์–ด๋ฅผ ์ด๋ฃจ์–ด ์‚ฌ์šฉํ•œ๋‹ค! ์ €๋ฒˆ์— Handle ์„ ์ด์šฉํ•ด ์ด๋ฒคํŠธ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋˜ ๊ฒƒ์„ ์กฐ๊ธˆ ๋ฐœ์ „์‹œ์ผœ, ์ด๋ฒˆ์—๋Š” condition variable ์„ ์‚ฌ์šฉํ•ด๋ณผ ๊ฒƒ์ด๋‹ค. ์‚ฌ์‹ค condition variable ์€ Handle ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์กฐ๊ธˆ ๋” ์šฐ์•„ํ•œ(?) ๋ฐฉ์‹์ด๋ฉฐ, ์กฐ๊ฑด์„ ์ฒดํฌํ•˜์—ฌ ๋ฝ์„ ์žก๊ณ  ํ‘ธ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด ์ค€๋‹ค. ๋˜ํ•œ condition variable ์€ ์œ ์ € ๋ ˆ๋ฒจ ์˜ค๋ธŒ์ ํŠธ์ด๋ฏ€๋กœ..

Game Dev/Game Server 2023. 7. 14. 20:30
[C++ ๊ฒŒ์ž„ ์„œ๋ฒ„] 1-9. ์ด๋ฒคํŠธ ๊ตฌํ˜„ (+ Handle)

[C++ ๊ฒŒ์ž„ ์„œ๋ฒ„] 1-9. ์ด๋ฒคํŠธ ๊ตฌํ˜„ (+ Handle) ํ•ต์‹ฌ : 1. ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด SpinLock ์— ๋น„ํ•ด CPU ๋‚ญ๋น„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. 2. ์ด๋ฒคํŠธ์˜ ๊ฐœ๋…์€ ๊ฐ„๋‹จํ•˜๋‹ค. ํ•ธ๋“ค์„ ๋งŒ๋“  ํ›„, Consumer ๋Š” ํ•ธ๋“ค์„ ์ฐธ๊ณ ํ•˜์—ฌ ๊นจ์šธ ๋•Œ๊นŒ์ง€ ์ค€๋น„ ์ƒํƒœ์— ๋“ค์–ด๊ฐ€๊ณ , Producer ๊ฐ€ ์ค€๋น„๊ฐ€ ๋˜์—ˆ์„ ๋•Œ ํ•ธ๋“ค์—๊ฒŒ ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋‚ด๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. 3. ํ•ธ๋“ค์€ ์ปค๋„ ์˜ค๋ธŒ์ ํŠธ์— ํ•ด๋‹นํ•˜์—ฌ, ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ด๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด์ œ Lock ๊ตฌํ˜„์„ ํ•จ์— ์žˆ์–ด '๋ฌด์ž‘์ • ๊ธฐ๋‹ค๋ฆฌ๊ธฐ' ์™€ '์ž ๊น ๊ธฐ๋‹ค๋ฆฌ๊ธฐ' ๋ฅผ ๊ตฌํ˜„ํ•ด ๋ณด์•˜์œผ๋‹ˆ, ๋งˆ์ง€๋ง‰ ์ˆœ์„œ๊ฐ€ ๋‚จ์•„์žˆ๋‹ค. ๋ฐ”๋กœ... '์ œ 3์ž๊ฐ€ ๊นจ์›Œ์ฃผ๊ธฐ' ์ธ๋ฐ, ์—ฌ๊ธฐ์„œ '์ œ 3์ž'๋ผ ํ•จ์€ ์ผ๋ฐ˜์ ์œผ๋กœ OS ์˜ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์˜๋ฏธํ•˜๊ณ , '๊นจ์›Œ์ค€๋‹ค' ๋Š” ๊ฒƒ์€ ํ•ด๋‹น ์“ฐ๋ ˆ๋“œ์— ์‹œ๊ทธ๋„์„ ..

Game Dev/Game Server 2023. 7. 14. 19:29
[C++ ๊ฒŒ์ž„ ์„œ๋ฒ„] 1-8. Sleep ๊ฐœ๋…๊ณผ ๊ตฌํ˜„

[C++ ๊ฒŒ์ž„ ์„œ๋ฒ„] 1-8. Sleep ๊ฐœ๋…๊ณผ ๊ตฌํ˜„ ํ•ต์‹ฌ : 1. Lock ์„ ์žก์„ ์ˆ˜ ์—†์„ ๋•Œ, ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•  ๋•Œ sleep ์„ ์‚ฌ์šฉํ•œ๋‹ค. 2. Sleep ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ํ•ด๋‹น ์“ฐ๋ ˆ๋“œ๋Š” ์ค€๋น„ ์ƒํƒœ์— ์žˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ๋Œ์•„์˜จ๋‹ค. ์ด ์‹œ๊ฐ„๋™์•ˆ์—๋Š” CPU ์ž์›์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹  Kernel Space ๋กœ ์ „ํ™˜๋˜๋Š” ๊ณผ์ •์—์„œ์˜ ๋น„์šฉ์€ ๋ฐœ์ƒํ•œ๋‹ค(์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ). 3. yield ๋Š” ์“ฐ๋ ˆ๋“œ์—๊ฒŒ ์ฃผ์–ด์ง„ Time Slice ๋ฅผ ์ฆ‰์‹œ ๋ฐ˜๋‚ฉํ•˜๋„๋ก ํ•˜๋ฉฐ, ์Šค์ผ€์ค„๋Ÿฌ์—๊ฒŒ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์–ด๋–ค ์ผ์„ ํ• ์ง€ ์•Œ์•„์„œ ์ •ํ•ด๋‹ฌ๋ผ๊ณ  ์š”์ฒญ์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด์ „์— Lock ๊ตฌํ˜„ ์ด๋ก ์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ ์ค‘ ๋‘๋ฒˆ์งธ์ธ, '๋žœ๋ค ์‹œ๊ฐ„ ํ›„ ๋ณต๊ท€' ๋ฉ”ํƒ€๊ฐ€ ๋ฐ”๋กœ sleep ์ด๋‹ค. ์ด์ „ ๊ธ€์—์„œ SpinLock ์„ ์ด์šฉํ•ด '๋ฌด์ž‘์ • ๊ธฐ๋‹ค๋ฆฌ๋Š”..

Game Dev/Game Server 2023. 7. 12. 21:17