Skip to content

Commit

Permalink
Merge pull request #46 from Seogeurim/C++/ggjae
Browse files Browse the repository at this point in the history
C++/ggjae
  • Loading branch information
Seogeurim authored Jul 13, 2021
2 parents b620bf5 + 814ac79 commit ed4b318
Show file tree
Hide file tree
Showing 2 changed files with 158 additions and 0 deletions.
2 changes: 2 additions & 0 deletions contents/language/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@
- ์ž๋ฐ” API ํ™œ์šฉ

## C++

- [๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ](./c++/multithread-programming.md)
156 changes: 156 additions & 0 deletions contents/language/c++/multithread-programming.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
# Multithread Programming

> ์ž‘์„ฑ์ž : [๋ฐ•์žฌ์šฉ](https://github.com/ggjae)
๋ณธ ์ž๋ฃŒ๋Š” ์ž‘์„ฑ์ž์ธ '๋ฐ•์žฌ์šฉ'์˜ ๊ฐœ์ธ Repository์˜ ๊ธ€์„ ์žฌ๊ตฌ์„ฑํ•˜์—ฌ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์ž๋ฃŒ๋ฅผ ๊ณต๋ถ€ํ•˜๊ธฐ ์ด์ „์— ์ตํ˜€๋‘์–ด์•ผ ํ•˜๋Š” ๋‘๊ฐ€์ง€ ๊ธฐ์ˆ ์„ ๋จผ์ € ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

- ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜๊ธฐ
- ์Šค๋ ˆ๋“œ์™€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ๋ถ„ํ•ด๋ณด๊ธฐ

<details>
<summary>Table of Contents</summary>

- [ํ”„๋กœ์„ธ์Šค Review](#ํ”„๋กœ์„ธ์Šค)
- [์Šค๋ ˆ๋“œ Review](#์Šค๋ ˆ๋“œ)
- [๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์‚ฌ์šฉ ์ด์œ ](#๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ-ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜-์‚ฌ์šฉ-์ด์œ )
- [๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ํž˜๋“  ์ด์œ ](#๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ-ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด-ํž˜๋“ -์ด์œ )
- [๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋žจ](#๋ณ‘๋ ฌ-ํ”„๋กœ๊ทธ๋žจ)

</details>

---

## ํ”„๋กœ์„ธ์Šค

์šด์˜์ฒด์ œ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๋‹จ์œ„
์‹คํ–‰ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๊ณง ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ. ์‹คํ–‰ํŒŒ์ผ์˜ ์‹คํ–‰์€ ์šด์˜์ฒด์ œ๊ฐ€ ํŒŒ์ผ์„ ์ฝ์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ์— ๋ณต์‚ฌํ•ด๋‘๊ณ  ์‹œ์ž‘ ์ฃผ์†Œ๋กœ ์ ํ”„ํ•˜๋Š” ๊ฒƒ. ๋ฉ€ํ‹ฐ์ฝ”์–ด๊ฐ€ ์•„๋‹ˆ๋”๋ผ๋„ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์‹œ์— ์‹คํ–‰๋œ๋‹ค.

ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

- Code : ์‹คํ–‰๋  ๋ช…๋ น์–ด๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๊ตฌ์—ญ
- Data : ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๊ตฌ์—ญ
- Stack : ์ง€์—ญ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜ ๋ฆฌํ„ด ์ฃผ์†Œ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๊ตฌ์—ญ
- Heap : malloc์ด๋‚˜ New๋กœ ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๊ตฌ์—ญ
- PCB : Process Control Block

ํ”„๋กœ์„ธ์Šค๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์„ฑ๊ฒฉ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ตฌ์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ๊ด€๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ์„ **์„ธ๊ทธ๋จผํŠธ**๋ผ ํ•œ๋‹ค.

## ์Šค๋ ˆ๋“œ

ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ์˜ ์‹คํ–‰๋˜๋Š” ํ๋ฆ„์˜ ๋‹จ์œ„
ํ”„๋กœ์„ธ์Šค์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์ด๋‹ค. ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋Š” ์ž์‹  ๊ณ ์œ ์˜ ์Šคํƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  Data, Heap, Code ์˜์—ญ์€ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์™€ ๊ณต์œ ํ•˜๊ฒŒ ๋œ๋‹ค.

ํ•œ ํ”„๋กœ๊ทธ๋žจ์—์„œ์˜ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ ํž™ ์˜์—ญ์€ ์Šค๋ ˆ๋“œ๊ฐ„ ๊ณต์œ ๊ฐ€ ๋œ๋‹ค. ๋˜‘๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๊ณ  ํ•œ ์žฅ์†Œ์— ์žˆ๋Š” ๊ฒƒ์„ ์ž์‹๊ณผ ๋ถ€๋ชจ๊ฐ€ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

---

## ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ ๊ด€๋ จ

- ์Šคํƒ์˜์—ญ๋งŒ ์ƒˆ๋กœ ํ•˜๋‚˜ ํŒŒ์ฃผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์Šค๋ ˆ๋“œ๋Š” ์ƒ์„ฑ ์‹œ overhead๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ์ž‘๋‹ค.
- ์บ์‹œ ๋ฏธ์Šค๊ฐ€ ๋น„๊ต์  ์ ๊ฒŒ ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์Šค๋ ˆ๋“œ๋Š” Context Switching ๋น„์šฉ์˜ overhead๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ์ ๋‹ค.
- ์Šค๋ ˆ๋“œ๊ฐ„์˜ ํ†ต์‹ ์ด ํ”„๋กœ์„ธ์Šค๊ฐ„์˜ ํ†ต์‹ ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ„์˜ ํ†ต์‹ ์€ overhead๊ฐ€ ํผ
- ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ์—์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๊ฐ€ ์ „์ฒด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฉˆ์ถ”๊ฒŒ ํ•œ๋‹ค.
- ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์—ฌ๋Ÿฌ๊ตฐ๋ฐ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜๋ฏ€๋กœ ์Šค๋ ˆ๋“œ์˜ ๊ฒฝ์šฐ ๋””๋ฒ„๊น…์ด ๋„ˆ๋ฌด๋‚˜๋„ ์–ด๋ ต๋‹ค.


# ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์‚ฌ์šฉ ์ด์œ 

- ๋ฉ€ํ‹ฐ์ฝ”์–ด CPU์—์„œ์˜ ํ”„๋กœ๊ทธ๋žจ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•˜์—ฌ
- ๋ฉ€ํ‹ฐ CPU ์ปดํ“จํ„ฐ, ๋ณ‘๋ ฌ์ปดํ“จํ„ฐ์—์„œ์˜ ํ”„๋กœ๊ทธ๋žจ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•˜์—ฌ


ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋” ๋น ๋ฅด๊ฒŒ ๋Œ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.
10 FPS ๊ฒŒ์ž„์„ 20 FPS๋กœ ์˜ฌ๋ฆฌ๊ณ  ์‹ถ์„ ๋•Œ, ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๋†’์ด๊ธฐ ์œ„ํ•˜์—ฌ **๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ** ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•œ๋‹ค.


## ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋ญ์•ผ?

- ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์œ ์ผํ•œ ๊ตฌํ˜„ ์ˆ˜๋‹จ
- ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์‹คํ–‰์‹œ์ผœ ๋ณ‘๋ ฌ์„ฑ์„ ์–ป๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ•


## ์„ฑ๋Šฅ์„ ์œ„ํ•˜์—ฌ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋Š”๊ฐ€?

์ •๋‹ต์€ ์•„๋‹ˆ๋‹ค. ๊ฒŒ์ž„์€ ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ด€์€ ์žˆ์ง€๋งŒ ๊ฒŒ์ž„์ด ๋Š๋ฆฌ๊ฑฐ๋‚˜, ํ”„๋กœ๊ทธ๋žจ์ด ๋Š๋ฆฌ๋‹ค๋ฉด ์„ฑ๋Šฅ ๊ฐœ์„ ์ด ์šฐ์„ ์‹œ ๋˜์–ด์•ผ ํ•œ๋‹ค. ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด์„œ ์„ฑ๋Šฅ๊ฐœ์„ ์„ ์ง„ํ–‰ํ•ด์•ผ ํ•˜๊ณ  ์ตœํ›„์˜ ๋ณด๋ฃจ๋กœ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง„ํ–‰ํ•˜์—ฌ์•ผ ํ•œ๋‹ค.
**์ฃผ์˜** ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋ฉด ๋” ๋Š๋ ค์งˆ์ง€๋„ ๋ชจ๋ฅธ๋‹ค.

## ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ํž˜๋“  ์ด์œ 

๋งค๋ฒˆ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•จ์—๋„ ๊ฒฐ๊ณผ๊ฐ’์ด ๋‹ฌ๋ผ์ง„๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•ด์„œ ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๋ฉด ๊ณ„์† ๊ฐ™์€ ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™€์•ผ ํ•˜๋Š”๋ฐ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๊ฐ’์ด ๋งค๋ฒˆ ๋‹ค๋ฅด๋‹ค. ์ด๊ฒƒ์€ ์ž˜๋ชป ๋งŒ๋“  ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋””๋ฒ„๊น…์ด ์‰ฝ์ง€ ์•Š๊ณ  Data Race์— ๋ถ€๋”ชํž ์ˆ˜ ์žˆ๋‹ค.
Data Race๋ž€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‘๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ฝ๊ณ  ์“ฐ๊ณ  ํ•  ๋•Œ์— ๋ชจ๋“  ์ „์—ญ ๋ณ€์ˆ˜๋Š” ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์ด๋ฏ€๋กœ ์ฝ๊ณ  ์“ฐ๋Š” ์ˆœ์„œ์— ๋”ฐ๋ผ ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๊ณ  ์ด ์ƒํƒœ๋ฅผ ๊ฒฝ์Ÿ ์ƒํƒœ๋ผ๊ณ  ํ•œ๋‹ค. ํ•˜์ง€๋งŒ C++11์—์„œ lock๊ณผ unlock์„ ์ง€์›ํ•ด์ฃผ๋ฏ€๋กœ ๋ณต์ˆ˜๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋„๋ก ์ฝ”๋”ฉ์„ ์ง„ํ–‰ํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

``` CPP
#include <thread>
#include <iostream>
#include <mutex>

std::mutex mtx_lock;

int main(){

std::thread Threads1([&] (){
for(int i=0;i<5;++i){
mtx_lock.lock();
std::cout << "Thread Num : " << i << std::endl;
mtx_lock.unlock();
}
});

std::thread Threads2;
Threads2 = std::thread([&](){
for(int i=10;i<15;++i){
mtx_lock.lock();
std::cout << "Thread Num : " << i << std::endl;
mtx_lock.unlock();
}
}
return 0;
}
```

๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹œ mutex ๊ฐ์ฒด๋Š” ์ „์—ญ ๋ณ€์ˆ˜๋กœ ์ฝ”๋”ฉํ•˜์—ฌ์•ผ ํ•˜๊ณ  ๊ฐ™์€ ๊ฐ์ฒด ์‚ฌ์ด์—์„œ๋งŒ lock๊ณผ unlock์ด ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ์ฃผ์˜ํ•˜์—ฌ์•ผ ํ•œ๋‹ค. ์„œ๋กœ ๋™์‹œ์— ์‹คํ–‰๋˜์–ด๋„ ๊ดœ์ฐฎ์€ Critical Section (lot reader, 0 writer)์—์„œ๋Š” ๋‹ค๋ฅธ mutex ๊ฐ์ฒด๋กœ ๋ณดํ˜ธํ•˜๋Š”๊ฒƒ์ด ์„ฑ๋Šฅ์— ์ข‹๋‹ค.

## ๋ฉ€ํ‹ฐ์ฝ”์–ด CPU

**ํ•œ ๊ฐœ ์ด์ƒ์˜ ์ฝ”์–ด**๋กœ ๊ตฌ์„ฑ๋œ CPU. i3, i5, i7
2021๋…„ ํ˜„์žฌ๋Š” ๋ชจ๋“  ๊ฒƒ์ด ๋‹ค ๋ฉ€ํ‹ฐ์ฝ”์–ด ex) Xbox, ๋‹Œํ…๋„ ์Šค์œ„์น˜


## C++ ์–ธ์–ด์— ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ‘œ์ค€์œผ๋กœ ์กด์žฌ

๊ณผ๊ฑฐ์˜ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ•:
Window์—์„œ๋Š” Win32 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ง€์›๋˜๋Š” API ์‚ฌ์šฉํ–ˆ์—ˆ๊ณ , ์œˆ๋„์šฐ๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์— ํŠนํ™”๋œ OS์ด๊ณ  ๋ฆฌ๋ˆ…์Šค๋Š” pthread API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋Šฅํ–ˆ๋‹ค.

Windows์—์„œ์˜ thread =>
ํ”„๋กœ์„ธ์Šค์˜ ํ•˜์œ„ ๊ฐœ๋… ํ”„๋กœ์„ธ์Šค๋Š” ์ฒ˜์Œ ์‹œ์ž‘ ์‹œ ํ•œ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ–๊ณ  ์‹œ์ž‘๋˜๊ณ  ์šด์˜์ฒด์ œ๊ฐ€ ์ง์ ‘ ์Šค์ผ€์ฅด๋งํ•˜๊ฒŒ ๋œ๋‹ค.

---

## ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋žจ

๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋žจ์˜ ํŠน์ง•
- ์‹คํ–‰๋œ ํ”„๋กœ์„ธ์Šค ๋‚ด๋ถ€์˜ ์—ฌ๋Ÿฌ๊ณณ์ด ๋™์‹œ์— ์‹คํ–‰๋œ๋‹ค.
- ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฐ์ฒด ์‚ฌ์ด์˜ ๋™๊ธฐํ™”๊ฐ€ ํ•„์ˆ˜์ด๋‹ค. (synchronization)
- **๊ณต์œ ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ**๊ณผ ๋ฉ”์„ธ์ง€ํŒจ์‹ฑ ๋ชจ๋ธ์ด ์žˆ๋‹ค.

## ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋žจ์˜ ์š”๊ตฌ์‚ฌํ•ญ

- ์ •ํ™•์„ฑ : ๋‹ค์–‘ํ•œ ํ๋ฆ„์—์„œ ๋™์‹œ๋‹ค๋ฐœ์ ์œผ๋กœ ํ˜ธ์ถœํ•ด๋„ ๋ฌธ์ œ ์—†์ด ์‹คํ–‰๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ•„์š”
- ์„ฑ๋Šฅ : Context ์ฆ๊ฐ€์— ๋”ฐ๋ฅธ ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด ๋†’์•„์•ผ ํ•จ

---

### ์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

1. **๋ฉ€ํ‹ฐ์ฝ”์–ด ํ”„๋กœ์„ธ์„œ**๋ฅผ ๋งŒ๋“œ๋Š” ์ด์œ ?

> CPU์˜ ์„ฑ๋Šฅ์„ ์˜ฌ๋ ค์•ผํ•˜๊ณ , ํด๋Ÿญ ์†๋„๋ฅผ ๋†’์—ฌ์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ํด๋Ÿญ ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์—†์Œ. ํ•œ๊ณ„๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋‹ค. => ํด๋Ÿญ ์†๋„๊ฐ€ 4GHz๊ฐ€ ๋˜๋ฉด ์ปดํ“จํ„ฐ๊ฐ€ ๋ถˆ์— ํƒ€๊ฒŒ ๋œ๋‹ค. ์šฐ์ฃผ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ์„ค๊ณ„๋˜์–ด ์žˆ์Œ.
4Ghz์˜ ๋ฒฝ์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค. ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์•ก์ฒด์งˆ์†Œ๋ฅผ ๋“ค์ด๋ถ€์–ด์•ผ ํ•จ. ๋‚จ์€ ๊ฒƒ์€ ๋ฉ€ํ‹ฐ์ฝ”์–ด ๋ฟ์ด์˜€๊ณ , ์‹ฑ๊ธ€๋กœ๋Š” ๋„์ €ํžˆ ์•ˆ๋˜๋‹ˆ๊นŒ ์ฝ”์–ด ๊ฐœ์ˆ˜๋กœ ์‹ธ์šฐ๊ณ  ์žˆ๋‹ค. ๋“€์–ผ์ฝ”์–ด CPU 2๊ฐœ, ์ฟผ๋“œ์ฝ”์–ด CPU 1๊ฐœ ์ฐจ์ด๋Š” ํฌ์ง€ ์•Š๋‹ค. ์—ฌ๋Ÿฌ ์ฝ”์–ด๊ฐ€ ๋Šฆ๊ฒŒ ๊ฐœ๋ฐœ๋œ ์ด์œ ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์‹œ ์งœ์•ผํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋””๋ฒ„๊น…๋„ ์–ด๋ ต๊ณ  ์ด๋ฏธ ์ž‘์„ฑํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

2. ์Šค๋ ˆ๋“œ์˜ ๊ฐœ์ˆ˜์™€ ์ฝ”์–ด์˜ ๊ฐœ์ˆ˜๋Š” ์ผ์น˜ํ•˜์ง€ ์•Š์•„๋„ ์ƒ๊ด€์ด ์—†๋Š” ์ด์œ ?

> ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ๋ถ„ํ• ๋กœ ๋Œ์•„๊ฐ€๋ฉด์„œ ์‹คํ–‰๋˜๋“ฏ ์Šค๋ ˆ๋“œ๋„ ์‹œ๋ถ„ํ• ๋กœ ์šด์˜๋˜์–ด ์ค‘๊ฐ„์— ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค. ์‰ฝ๊ฒŒ ์ฝ”์–ด์˜ ๊ฐœ์ˆ˜๋Š” CPU ๋‚ด ๋ฌผ๋ฆฌ์  ์—ฐ์‚ฐ๋ถ€์˜ ๊ฐœ์ˆ˜์ด๊ณ , ์Šค๋ ˆ๋“œ๋Š” **์ž‘์—…๋‹จ์œ„**์ด๋ฏ€๋กœ ์ผ์น˜ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
3. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง„ํ–‰ํ–ˆ์„ ๋•Œ ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋ณด๋‹ค ๋Š๋ ค์กŒ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ?
> ์‚ฌ์šฉํ•˜๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๋งŽ์•„์งˆ์ˆ˜๋ก bottleneck์˜ ๊ฐ€๋Šฅ์„ฑ๊ณผ ์“ฐ๋ ˆ๋“œ๋งˆ๋‹ค ์ฐธ์กฐํ•˜๋Š” ์บ์‹œ๊ฐ€ ๋‹ค๋ฅด๋ฏ€๋กœ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ฑฐ๋‚˜ ์Šค๋ ˆ๋“œ ํ•˜๋‚˜๋งŒ์œผ๋กœ๋„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋กœ ์ง„ํ–‰์‹œ์ผœ๋„ race condition์„ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ ์œ„ํ•ด ์‹œ๊ฐ„์ด ์‚ฌ์šฉ๋˜๊ณค ํ•œ๋‹ค. ์ ์žฌ์ ์†Œ์— ์‚ฌ์šฉํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

0 comments on commit ed4b318

Please sign in to comment.