관리 메뉴

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

KoreanFoodie's Study

[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
[C++ κ²Œμž„ μ„œλ²„] 1-3. atomic (μ›μžμ ) λ³€μˆ˜μ™€ μ—°μ‚°

[C++ κ²Œμž„ μ„œλ²„] 1-3. atomic 에 λŒ€ν•˜μ—¬ 핡심 : 1. ++, -- 같은 κ°„λ‹¨ν•œ μ—°μ‚°μ‘°μ°¨, 사싀 μ–΄μ…ˆλΈ”λ¦¬μ–΄μ—μ„œλŠ” 'κ°’ 볡사' -> 'λ³΅μ‚¬λœ 값에 μ—°μ‚° μˆ˜ν–‰' -> 'λ³΅μ‚¬λœ 값을 λ‹€μ‹œ λŒ€μž…' 같은 κ³Όμ •μœΌλ‘œ μͺΌκ°œμ§„λ‹€ 2. λ§Œμ•½ νŠΉμ • 연산이 진행 쀑일 경우, λ‹€λ₯Έ 연산이 끼어듀지 μ•Šλ„λ‘ λ§Œλ“€κ³  μ‹Άλ‹€λ©΄, ν•΄λ‹Ή λ³€μˆ˜λ₯Ό atomic 으둜 μ„ μ–Έν•  수 μžˆλ‹€. 3. 일반적으둜 atomic 연산은 일반 연산보닀 λŠλ¦¬λ―€λ‘œ, λ‚¨μš©μ€ μ§€μ–‘ν•˜μ—¬μ•Ό ν•œλ‹€. μ–΄λ–€ 연산이 atomic (μ›μžμ ) 으둜 μ΄λ£¨μ–΄μ§„λ‹€λŠ” 것은, ν•΄λ‹Ή 연산이 μ§„ν–‰λ˜λŠ” 쀑간에 λ‹€λ₯Έ 연산이 λ™μ‹œμ— μ§„ν–‰λ˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€. 이전에 μ—¬λŸ¬ μ“°λ ˆλ“œλ“€μ΄ 곡유 μžμ›μ— μ ‘κ·Όν•˜λ € ν•  λ•Œ Race Condition 이 λ°œμƒν•  수 μžˆλ‹€κ³  μ΄μ•ΌκΈ°ν•œ 적이 μžˆλŠ”λ°, ..

Game Dev/Game Server 2023. 7. 10. 16:15
[C++ κ²Œμž„ μ„œλ²„] 1-1. λ©€ν‹°μ“°λ ˆλ“œ 개둠

[C++ κ²Œμž„ μ„œλ²„] 1-1. λ©€ν‹°μ“°λ ˆλ“œ 개둠 핡심 : 1. λ©€ν‹°μ“°λ ˆλ“œ ν”„λ‘œκ·Έλž˜λ°μ€ 식당을 μš΄μ˜ν•˜λŠ” 것과 λΉ„μŠ·ν•˜λ‹€. ν…Œμ΄λΈ”μ„ ν”„λ‘œμ„ΈμŠ€, ν…Œμ΄λΈ”μ—μ„œ μΌν•˜λŠ” 직원을 μ“°λ ˆλ“œ, μ˜ν˜Όμ„ 코어라고 μƒκ°ν•˜λ©΄ νŽΈν•˜λ‹€. 2. μ“°λ ˆλ“œλŠ” νž™ μ˜μ—­μ„ κ³΅μœ ν•˜μ§€λ§Œ, 각각의 정보λ₯Ό μŠ€νƒμ— μ €μž₯ν•œλ‹€. λ”°λΌμ„œ νž™ μ˜μ—­μ— μ ‘κ·Όν•  λ•ŒλŠ” Race Condition 이 λ°œμƒν•  수 μžˆλ‹€. λ©€ν‹°μ“°λ ˆλ“œ ν”„λ‘œκ·Έλž˜λ°μ€ 식당을 μš΄μ˜ν•˜λŠ” 것과 λΉ„μŠ·ν•˜λ‹€. ν…Œμ΄λΈ”μ„ ν”„λ‘œκ·Έλž¨, 직원을 μ“°λ ˆλ“œ, μ˜ν˜Όμ„ CPU 코어라고 μƒκ°ν•˜μž. 그럼 영혼이 μ§μ›μ—κ²Œ λ“€μ–΄κ°€μ•Ό ν”„λ‘œκ·Έλž¨μ΄ λŒμ•„κ°ˆ 것이닀. 이제 μš°λ¦¬κ°€ ν•΄μ•Ό ν•  일은, μ˜ν˜Όμ„ μ§μ›μ—κ²Œ μ–΄λ–»κ²Œ λΆ„λ°°ν•΄μ•Ό 쒋을지 ꡬ쑰λ₯Ό μ„€κ³„ν•˜κ³  μ½”λ“œλ₯Ό μ§œλŠ” 것이닀! μ‹€μ œλ‘œ μœ„μ˜ μŠ€μƒ·μ²˜λŸΌ, CPU μ½”μ–΄λ₯Ό 적절히 λ°°λΆ„ν•˜λ©΄μ„œ μƒκΈ°λŠ” 문제λ₯Ό 잘..

Game Dev/Game Server 2023. 7. 7. 17:41