🧐 Study/Game Server

[06μ£Όμ°¨] λ©€ν‹°μ“°λ ˆλ“œ 01

GAMEMING 2024. 4. 22. 23:18

 

 

- μ„±λŠ₯ ν–₯상

 1) ν”„λ‘œκ·Έλž¨ μ΅œμ ν™”

 2) λ©€ν‹° μ½”μ–΄ ν™œμš© β†’ λ©€ν‹°μ“°λ ˆλ“œ ν”„λ‘œκ·Έλž˜λ° ν•„μš”

 

- λ©€ν‹°μ“°λ ˆλ“œ

 : ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μ΄ μ—¬λŸ¬ 곳이 λ™μ‹œ λ‹€λ°œμ μœΌλ‘œ 싀행됨 (λ³‘λ ¬μ²˜λ¦¬)

 

- λ³‘λ ¬μ²˜λ¦¬

 : ν•˜λ‚˜μ˜ μž‘μ—…μ„ μ—¬λŸ¬ 개의 contextμ—μ„œ λ™μ‹œμ— μˆ˜ν–‰

 : context - CPU μ‹€ν–‰ μƒνƒœ (PCλ₯Ό ν¬ν•¨ν•œ λͺ¨λ“  λ ˆμ§€μŠ€ν„° κ°’)

 : ν•œ λŒ€μ˜ 컴퓨터 μ‚¬μš© β†’ SMP(μ—¬λŸ¬ 개의 CPU), Multi-Core (μ—¬λŸ¬ 개의 Core)

 : CPU ν•œ 개 μ†λ„λŠ” λ„ˆλ¬΄ λŠλ¦¬κΈ°μ— μ‚¬μš©ν•˜λŠ” 것 (ν”„λ‘œκ·Έλž¨ ꡬ쑰가 깔끔해지진 μ•ŠμŒ)

 : λ°œμ—΄ 속도에 λΆ€λ”ͺ친 클럭 속도 증가

 

 

- ν”„λ‘œμ„ΈμŠ€μ™€ μ“°λ ˆλ“œ

 1) ν”„λ‘œμ„ΈμŠ€ : μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨ - ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λŠ” ν•˜λ‚˜μ˜ μ‹€ν–‰ νŒŒμΌμ—μ„œ 좜발

 2) μ“°λ ˆλ“œ : ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 흐름 - ν”„λ‘œμ„ΈμŠ€ μ‹€ν–‰ 쀑 ν”„λ‘œκ·Έλž¨μ΄ μ“°λ ˆλ“œ 생성 λͺ…령을 μ‹€ν–‰

 

Process (μ •λ‚΄ν›ˆ κ΅μˆ˜λ‹˜ μˆ˜μ—… 자료)

 

 : ν”„λ‘œκ·Έλž¨μ€ ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€κ°€ λ˜μ–΄ 싀행됨

 : μ²˜μŒμ—” ν•˜λ‚˜μ˜ μ“°λ ˆλ“œλ‘œ μ‹€ν–‰, μ“°λ ˆλ“œλŠ” μ“°λ ˆλ“œλ₯Ό λ§Œλ“€ 수 있음

 : 각각의 μ“°λ ˆλ“œλŠ” μžμ‹ μ˜ μŠ€νƒ κ°–κ³  있고, 같은 ν”„λ‘œμ„ΈμŠ€μ˜ λͺ¨λ“  μ“°λ ˆλ“œλŠ” Data, Code, Heap 곡유

 

 

 

- λ©€ν‹°μ“°λ ˆλ“œ

 : λ©”λͺ¨λ¦¬

  1) μ „μ—­ λ³€μˆ˜ - λͺ¨λ“  μ“°λ ˆλ“œκ°€ 곡유 

  2) μ§€μ—­ λ³€μˆ˜ - μ“°λ ˆλ“œλ§ˆλ‹€ λ”°λ‘œ

  3) μ§€μ—­ λ³€μˆ˜λ„ κ°•μ œλ‘œ 곡유 κ°€λŠ₯함 (κ·ΈλŸ¬μ§€ 말자)

 : μžμ›(λ©”λͺ¨λ¦¬, 파일 ν•Έλ“€ λ“±)은 곡유 됨

 

 : μž₯점 - μ„±λŠ₯ ν–₯상, λΉ λ₯Έ 응닡 속도, 더 λ‚˜μ€ μžμ› ν™œμš©(CPU), ν”„λ‘œμ„ΈμŠ€λ³΄λ‹€ 효율적 (context switch)

 : μœ„ν—˜ - ν”„λ‘œκ·Έλž¨ λ³΅μž‘λ„ 증가, 디버깅 어렀움

 

 : κ²Œμž„μ„œλ²„μ—μ„œμ˜ λ©€ν‹° μ“°λ ˆλ“œ - 동접 ν–₯상, λΉ λ₯Έ 속도

 

 : 두 κ°€μ§€ μŠ€νƒ€μΌ 쑴재

 1) Heterogeneous - μž‘μ—…μ„ μ—­ν•  λ³„λ‘œ λ‚˜λˆ„μ–΄μ„œ μ „μš© μ“°λ ˆλ“œμ—κ²Œ λ§žκΉ€ β†’ κ²Œμž„ ν΄λΌμ΄μ–ΈνŠΈ

 2) Homogeneous - μž‘μ—…μ„ μͺΌκ°œμ„œ μ“°λ ˆλ“œ ꡬ뢄 없이 λ‚˜λˆ μ„œ 함 β†’ κ²Œμž„ μ„œλ²„

  - κ²Œμž„ μ„œλ²„λŠ” νŒ¨ν‚· ν•˜λ‚˜λ₯Ό ν•œ 쑰각의 μž‘μ—…μœΌλ‘œ 생각

 

 : 주의점

 - μ“°λ ˆλ“œ κ°œμˆ˜κ°€ λ§Žλ‹€κ³  μ’‹μ§€ μ•ŠμŒ

 - ν”„λ‘œμ„Έμ„œ / μ½”μ–΄ μˆ˜μ— λ§žμΆ”μ–΄λΌ (코어보닀 λ§Žμ€ μ“°λ ˆλ“œ β†’ context switching(λ¬Έλ§₯ κ΅ν™˜) λΆ€ν•˜, λ°˜μ‘μ†λ„ μ €ν•˜

 - λ§Žμ€ μ“°λ ˆλ“œ β†’ OS/HW λΆ€λ‹΄

 - λ‚΄κ°€ μ‚¬μš©ν•˜λŠ” λ©”λͺ¨λ¦¬μ˜ λ‚΄μš©μ΄ λ‹€λ₯Έ μ“°λ ˆλ“œμ— μ˜ν•΄ λ³€κ²½ 될 수 있음 (DataRace)

 - λ””λ²„κΉ…μ˜ 어렀움

 

// μ“°λ ˆλ“œ λ§Œλ“€κΈ°
// 객체λ₯Ό μƒμ„±ν•˜κ³  μƒμ„±μž μ΄ˆκΈ°κ°’μœΌλ‘œ μ‹€ν–‰ν•  ν•¨μˆ˜ λ„£μŒ

#include <thread>

std::thread t1 { mythread };



// μ“°λ ˆλ“œ μ’…λ£Œ 검사
// μžμ‹ μ“°λ ˆλ“œλ₯Ό μƒμ„±ν•œ μ“°λ ˆλ“œλŠ” μƒμ„±ν•œ μ“°λ ˆλ“œμ˜ μ’…λ£Œλ₯Ό 확인해야 함
t1.join();

 

 :  DataRace - 같은 λ©”λͺ¨λ¦¬λ₯Ό ν•œ 개 μ΄μƒμ˜ μ“°λ ˆλ“œκ°€ λ™μ‹œμ— 읽고 μ“°λŠ” 경우 (적어도 ν•œ κ°œλŠ” λ°˜λ“œμ‹œ μ“°κΈ°)

 : 이λ₯Ό ν•΄κ²°ν•˜λ €λ©΄ ν•œ λ²ˆμ— ν•˜λ‚˜λ§Œ μˆ˜ν–‰ν•  수 μžˆλ„λ‘ 처리

  - Lock()/Unlock() β†’  Mutex객체 (μ „μ—­λ³€μˆ˜ μ„ μ–Έ)

  - 같은 객체 μ‚¬μ΄μ—μ„œλ§Œ λ™μž‘, μ„œλ‘œ λ™μ‹œμ— μ‹€ν–‰ κ°€λŠ₯ν•œ 크리티컬 μ„Ήμ…˜μ€ λ‹€λ₯Έ mutex μ‚¬μš©

  - 단점 : Lock의 λΆ€ν•˜, 크기(λ„ˆλ¬΄ μž‘μœΌλ©΄ 자주 ν˜ΈμΆœλ˜μ–΄ μ„±λŠ₯ μ €ν•˜, 크면 μ˜€λž«λ™μ•ˆ λŒ€κΈ°ν•˜λŠ” μ“°λ ˆλ“œλ‘œ 인해 μ„±λŠ₯ κ°μ†Œ)

 

 : Lock의 개수 μ΅œμ†Œν™” & 병렬 μˆ˜ν–‰ μ΅œλŒ€ν™” β†’ μ•Œκ³ λ¦¬μ¦˜ μž¬μž‘μ„± ν•„μš”

 : Atomic 자료 ꡬ쑰

 - κ³ μ„±λŠ₯ : μƒν˜Έλ°°μ œ 없이 λ™μ‹œ μ‹€ν–‰

 - Data Race둜 μΈν•œ μ˜€λ™μž‘ μ—†μŒ

 - Queue, Stack .. λ“± λ‹€μ–‘ν•œ 자료ꡬ쑰

 

 

 

 

728x90
λŒ“κΈ€μˆ˜0