Notice
Recent Posts
Recent Comments
Link
관리 메뉴

λͺ©λ‘μ „체 κΈ€ (1096)

KoreanFoodie's Study

[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-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
[C++ κ²Œμž„ μ„œλ²„] 1-6. Lock κ΅¬ν˜„ 이둠

[C++ κ²Œμž„ μ„œλ²„] 1-6. Lock κ΅¬ν˜„ 이둠 핡심 : 1. Lock 을 κ΅¬ν˜„ν•˜λŠ” 방식은 크게 μ„Έ κ°€μ§€λ‘œ λ‚˜λ‰œλ‹€. λ¬΄μž‘μ • 기닀리기, μž μ‹œ ν›„ λŒμ•„μ˜€κΈ°, κΉ¨μ›Œμ€„ λ•ŒκΉŒμ§€ 기닀리기 2. SpinLock 을 μ‚¬μš©ν•˜μ—¬ λ¬΄μž‘μ • κΈ°λ‹€λ¦¬κ±°λ‚˜, μ–΄λŠ 정도 Sleep 을 ν•˜κ³  λ‚œ ν›„ Lock 을 λ‹€μ‹œ 작으렀고 μ‹œλ„ν•  μˆ˜λ„ μžˆλ‹€. 3. ν˜Ήμ€ λ‹€λ₯Έ 일을 ν•˜λ‹€κ°€, Lock 을 μž‘μ„ 수 있게 λ˜λŠ” μƒνƒœκ°€ λ˜μ—ˆμ„ λ•Œ λ…Έν‹°λ₯Ό 달라고 μš”μ²­ν•  μˆ˜λ„ μžˆλ‹€. 예λ₯Ό λ“€μ–΄ Condition Variable 이 μžˆλ‹€. 이 κ³Όμ •μ—μ„œ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ΄ 일어날 수 μžˆλ‹€! 본격적으둜 Lock 을 κ΅¬ν˜„ν•˜κΈ° μ „, Lock 을 κ΅¬ν˜„ν•˜λŠ” 일반적인 방식 3 가지에 λŒ€ν•΄ λ¨Όμ € μ†Œκ°œν•˜κ³  가도둝 ν•˜κ² λ‹€. 사싀 λ‚΄μš©μ€ κ°„λ‹¨ν•˜λ‹€. Lock 이 이미 κ±Έλ¦° μƒνƒœλΌκ³  ν• ..

Game Dev/Game Server 2023. 7. 11. 17:26