League Of Legends - Link Select [06์ฃผ์ฐจ] ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ 01
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿค“ Study/Game Server

[06์ฃผ์ฐจ] ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ 01

by GAMEMING 2024. 4. 22.
728x90

 

 

- ์„ฑ๋Šฅ ํ–ฅ์ƒ

 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 .. ๋“ฑ ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ