๐พ [CS] CPU ๋ฐ์ด๋ ์์ (CPU-Bound Task)์ด๋ ๋ฌด์์ผ๊น์?
- CPU ๋ฐ์ด๋ ์์ (CPU-Bound Task)์ ํ๋ก๊ทธ๋จ์ ์คํ ์๋๊ฐ CPU์ ์ฒ๋ฆฌ ์๋์ ์ํด ์ ํ๋๋ ์์ ์ ์๋ฏธํฉ๋๋ค.
- ์ฆ, ์ฐ์ฐ์ด๋ ๊ณ์ฐ ์์ ์ด ๋ง์์ CPU๊ฐ ๋๋ถ๋ถ์ ์๊ฐ์ ๊ณ์ฐ ์ฒ๋ฆฌ์ ์ฌ์ฉํ๋ฉฐ, CPU์ ์ฑ๋ฅ์ด ์ ์ฒด ์์ ์ ์ฑ๋ฅ์ ๊ฒฐ์ ์ง๋ ์ํฉ์ ๋๋ค.
1๏ธโฃ CPU ๋ฐ์ด๋ ์์ (CPU-Bound Task)์ ํน์ง.
1๏ธโฃ ๋ณต์กํ ๊ณ์ฐ ์์ .
- CPU ๋ฐ์ด๋ ์์ (CPU-Bound Task)์ ์ผ๋ฐ์ ์ผ๋ก ๋ณต์กํ ์ํ ๊ณ์ฐ, ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์ํธํ, ๋จธ์ ๋ฌ๋ ๋ฑ ๋ง์ ์ฐ์ฐ์ ํ์๋ก ํ๋ ์์ ์ด ํฌํจ๋ฉ๋๋ค.
- CPU๊ฐ ๊ณ์ํด์ ๊ณ์ฐ ์์ ์ ์ํํ๋ฉฐ, ๋ค๋ฅธ ํ๋์จ์ด(์: ๋์คํฌ, ๋คํธ์ํฌ)์ ์๋์ ์์กดํ์ง ์๊ณ CPU์ ์๋์ ์ํด ์ฑ๋ฅ์ด ๊ฒฐ์ ๋ฉ๋๋ค.
2๏ธโฃ CPU ์ฌ์ฉ๋ฅ ์ด ๋์.
- CPU ๋ฐ์ด๋ ์์ (CPU-Bound Task)์ CPU์ ์ฐ์ฐ ์์(CPU ์ฝ์ด(CPU Core)์ ํด๋ญ ์๋(Clock Speed))์ ์ต๋ํ ํ์ฉํฉ๋๋ค.
๐ CPU Core
์ค์์ฒ๋ฆฌ์ฅ์น(Central Processing Unit, CPU) ๋ด๋ถ์์ ๋ ๋ฆฝ์ ์ผ๋ก ์์ ์ ์ํํ ์ ์๋ ์ฒ๋ฆฌ ๋จ์๋ฅผ ์๋ฏธํฉ๋๋ค.
๊ฐ ์ฝ์ด(Core)๋ ์์ ๋ง์ ์ฐ์ฐ ์ฅ์น(ALU), ๋ ์ง์คํฐ, ์ ์ด ์ฅ์น ๋ฑ์ ๊ฐ์ถ๊ณ ์์ด, ํ๋ก๊ทธ๋จ์ ๋ช ๋ น์ ๋ ๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
ํ๋์ CPU๋ ์ฌ๋ฌ ๊ฐ์ Core(Multi Core)๋ฅผ ํฌํจํ๊ณ ์์ด, ๋์์ ์ฌ๋ฌ ์์ ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๐ ํด๋ญ ์๋(Clock Speed)
ํด๋ญ ์๋(Clock Speed)๋ CPU๊ฐ ์์ ์ ์ํํ๋ ์๋๋ฅผ ๋ํ๋ด๋ ์งํ๋ก, 1์ด ๋์ CPU๊ฐ ์คํํ ์ ์๋ ๋ช ๋ น์ด ์ฌ์ดํด์ ์๋ฅผ ์๋ฏธํฉ๋๋ค.
ํด๋ญ ์๋(Clock Speed)๋ ํค๋ฅด์ธ (Hz) ๋จ์๋ก ์ธก์ ๋๋ฉฐ, ๋ฉ๊ฐํค๋ฅด์ธ (MHz) ๋๋ ๊ธฐ๊ฐํค๋ฅด์ธ (GHz)๋ก ํํ๋ฉ๋๋ค.์๋ฅผ ๋ค์ด, 1GHz๋ CPU๊ฐ 1์ด์ 10์ต ๋ฒ์ ๋ช ๋ น์ด ์ฌ์ดํด์ ์ฒ๋ฆฌํ ์ ์๋ค๋ ์๋ฏธ์ ๋๋ค.
ํด๋ญ ์๋(Clock Speed)๊ฐ ๋์์๋ก CPU๊ฐ ๋ ๋น ๋ฅด๊ฒ ์๋ํ์ฌ, ๋ ๋ง์ ์์ ์ ์งง์ ์๊ฐ ์์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ํ๋ก๊ทธ๋จ์ ์คํํ ๋ CPU ์ฌ์ฉ๋ฅ (CPU Utilization)์ด ๋๊ฒ ๋ํ๋๋ฉฐ, CPU ์ฑ๋ฅ์ด ์ ์ฒด ์์ ์๋์ ํฐ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
2๏ธโฃ CPU ๋ฐ์ด๋ ์์ (CPU-Bound Task)์ ์.
1๏ธโฃ ์ด๋ฏธ์ง ์ฒ๋ฆฌ.
- ๋๋์ ์ด๋ฏธ์ง๋ฅผ ๋ณํํ๊ฑฐ๋, ํํฐ๋ฅผ ์ ์ฉํ๋ ์์
์ ํฝ์
๋จ์๋ก ๋ง์ ๊ณ์ฐ์ ํ์๋ก ํฉ๋๋ค.
- ์ด๋ฌํ ์์ ์ CPU์ ๊ณ์ฐ ์๋์ ์ํด ์ฒ๋ฆฌ ์๋๊ฐ ๊ฒฐ์ ๋ฉ๋๋ค.
2๏ธโฃ ๋น๋์ค ์ธ์ฝ๋ฉ/๋์ฝ๋ฉ.
- ๋น๋์ค ํ์ผ์ ์ธ์ฝ๋ฉํ๊ฑฐ๋ ๋์ฝ๋ฉํ๋ ์์ ์ ๋๋์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ํ์ํ๊ณ , ๋ณต์กํ ์๊ณ ๋ฆฌ์ฆ์ ํตํด ํ๋ ์์ ์์ถํ๊ฑฐ๋ ๋ณต์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ CPU ๋ฐ์ด๋ ์์ (CPU-Bound Task)์ ํด๋นํฉ๋๋ค.
3๏ธโฃ ์ํธํ/๋ณตํธํ.
- ๋ฐ์ดํฐ๋ฅผ ์ํธํํ๊ฑฐ๋ ๋ณตํธํํ๋ ๊ณผ์ ์ CPU๊ฐ ๋ณต์กํ ๊ณ์ฐ์ ์ํํด์ผ ํฉ๋๋ค.
- ์ด๋ ์ฃผ๋ก ๋ณด์๊ณผ ๊ด๋ จ๋ ์์ ์์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
4๏ธโฃ ๊ณผํ ๊ณ์ฐ ๋ฐ ๋ฐ์ดํฐ ๋ถ์.
-
๋ฐ์ดํฐ ๋ถ์, ์ํ์ ๋ชจ๋ธ๋ง, ์๋ฎฌ๋ ์ด์
๋ฑ ์๋ง์ ๊ณ์ฐ์ ํ์๋ก ํ๋ ์์
๋ CPU ๋ฐ์ด๋ ์์
์
๋๋ค.
- ์๋ฅผ ๋ค์ด, ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์์ ํต๊ณ์ ์ธ ๊ณ์ฐ์ ํ๋ ์์ ์ CPU์ ์ฒ๋ฆฌ ์ฑ๋ฅ์ ํฌ๊ฒ ์์กดํฉ๋๋ค.
5๏ธโฃ ๊ฒ์ ๋ก์ง ๋ฐ ๋ฌผ๋ฆฌ ์์ง.
- ๊ฒ์ ๋ด์ ๋ฌผ๋ฆฌ ์ฐ์ฐ, AI ์ฒ๋ฆฌ, ๊ฒ์ ๋ก์ง ๋ฑ์ ๋ง์ ๊ณ์ฐ์ ํ์๋ก ํ๋ฉฐ, ์ค์๊ฐ์ผ๋ก ๊ณ์ฐ์ ์ํํด์ผ ํ๊ธฐ ๋๋ฌธ์ CPU ๋ฐ์ด๋ ์์ ์ ์ํฉ๋๋ค.
3๏ธโฃ CPU ๋ฐ์ด๋ vs I/O ๋ฐ์ด๋
1๏ธโฃ CPU ๋ฐ์ด๋
- ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ด CPU ์ฒ๋ฆฌ ์๋์ ์ํด ์ ํ๋ฉ๋๋ค.
- ๋ณต์กํ ๊ณ์ฐ์ด๋ ์ฐ์ฐ ์์ ์ ์ํํ๋ ๊ฒฝ์ฐ CPU ๋ฐ์ด๋๊ฐ ๋ฉ๋๋ค.
- ์: ์ด๋ฏธ์ง ์ฒ๋ฆฌ, ๋น๋์ค ์ธ์ฝ๋ฉ, ์ํธํ ๋ฑ.
2๏ธโฃ I/O ๋ฐ์ด๋
- ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ด ์ ์ถ๋ ฅ(I/O) ์์ ์ ์๋์ ์ํด ์ ํ๋ฉ๋๋ค.
- ๋คํธ์ํฌ ํต์ , ํ์ผ ์ฝ๊ธฐ/์ฐ๊ธฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ๋ฑ ์ธ๋ถ ์ฅ์น์ ์๋์ ๋ฐ๋ผ ์ฑ๋ฅ์ด ๊ฒฐ์ ๋ฉ๋๋ค.
- ์: ํ์ผ ๋ค์ด๋ก๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐํ, ์น ํ์ด์ง ์์ฒญ ๋ฑ
4๏ธโฃ CPU ๋ฐ์ด๋ ์์ ์ ์ต์ ํ.
1๏ธโฃ ๋ณ๋ ฌ ์ฒ๋ฆฌ(Parallel Processing)
- CPU ๋ฐ์ด๋ ์์ ์ ๋ฉํฐ์ฝ์ด CPU๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์ฝ์ด์์ ๋์์ ์์ ์ ์ํํ๋๋ก ํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- Java์์๋ ๋ฉํฐ์ค๋ ๋ฉ(Multithreading)์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์ค๋ ๋์์ ๋์์ ์์ ์ ์ฒ๋ฆฌํ๋๋ก ํ๊ฑฐ๋ Fork/Join Framework๋ฅผ ์ฌ์ฉํ์ฌ ํ์คํฌ๋ฅผ ๋ถํ ํ๊ณ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๐ ์์(Java์์ Fork/Join Framework)
import java.util.concurrent.RecursiveTask;
import java.util.concurrent.ForkJoinPool;
public class SumTask extends RecursiveTask<Long> {
private final int[] array;
private final int start;
private final int end;
public SumTask(int[] array, int start, int end) {
this.array = array;
this.start = start;
this.end = end;
}
@Override
protected Long compute() {
if (end - start <= 10) { // ์์ ์์
์ ์ง์ ๊ณ์ฐ
long sum = 0;
for (int i = start; i < end; i++) {
sum += array[i];
}
return sum;
} else { // ํฐ ์์
์ ๋ถํ
int mid = (start + end) / 2;
SumTask
}
}
public static void main(String[] args) {
int[] array = new int[1000];
ForkJoinPool pool = new ForkJoinPool();
SumTask task = new SumTask(array, 0, array.length);
long sum = pool.invoke(task);
System.out.println("Sum: " + sum);
}
}
2๏ธโฃ ์ฐ์ฐ ์ต์ ํ.
- ๋ฐ๋ณต์ ์ธ ๊ณ์ฐ์ ์ค์ด๊ธฐ ์ํด ์๊ณ ๋ฆฌ์ฆ์ ์ต์ ํํ๊ฑฐ๋, ๋ณต์กํ ์ฐ์ฐ์ ๊ฐ๋จํ๊ฒ ๋ณ๊ฒฝํ์ฌ ์ฑ๋ฅ์ ํฅ์ ์ํฌ ์ ์์ต๋๋ค.
- ์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ๊ฐ ์ด๋ฏธ ์ ๋ ฌ๋์ด ์๋์ง ํ์ธํ๋ ์์ ์์๋ ๋งค๋ฒ ์ ๋ ฌ์ ์ํํ๊ธฐ๋ณด๋ค ์ ๋ ฌ ์ฌ๋ถ๋ฅผ ๋ฏธ๋ฆฌ ์ฒดํฌํ์ฌ ๋ถํ์ํ ์ฐ์ฐ์ ์ค์ด๋ ๋ฐฉ์์ผ๋ก ์ต์ ํํ ์ ์์ต๋๋ค.
3๏ธโฃ ์บ์ฑ(Caching)
- ๋ฐ๋ณต์ ์ผ๋ก ๊ณ์ฐ๋๋ ๊ฐ๋ค์ ์บ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํด๋๊ณ , ํ์ํ ๋๋ง๋ค ๋ค์ ๊ณ์ผํ์ง ์๊ณ ์ ์ฅ๋ ๊ฐ์ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ ๋์ผ ์ ์์ต๋๋ค.
- CPU ๋ฐ์ด๋ ์์ ์์๋ ์ค๋ณต๋ ๊ณ์ฐ์ด ๋ฐ์ํ์ง ์๋๋ก ๋ฉ๋ชจ์ด์ ์ด์ (Memoization) ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
5๏ธโฃ ์์ฝ.
- CPU ๋ฐ์ด๋ ์์ ์ ํ๋ก๊ทธ๋จ ์ฑ๋ฅ์ด CPU์ ์ฐ์ฐ ์ฒ๋ฆฌ ์๋์ ์ํด ์ ํ๋๋ ์์ ์ ์๋ฏธํฉ๋๋ค.
- ์ด๋ฌํ ์์ ์ ๋ณต์กํ ๊ณ์ฐ, ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์ํธํ ๋ฑ CPU๊ฐ ๋ง์ ์ฐ์ฐ์ ์ํํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- CPU ๋ฐ์ด๋ ์์ ์ ์ต์ ํํ๊ธฐ ์ํด์๋ ๋ณ๋ ฌ ์ฒ๋ฆฌ, ์ฐ์ฐ ์ต์ ํ, ์บ์ฑ ๋ฑ์ ๊ธฐ๋ฒ์ ํ์ฉํ์ฌ CPU ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ณ , ์ฑ๋ฅ์ ์ต๋ํ ๋์ด์ฌ๋ฆด ์ ์์ต๋๋ค.
- CPU ๋ฐ์ด๋ ์์ ์ I/O ๋ฐ์ด๋ ์์ ๊ณผ ๋์กฐ์ ์ผ๋ก, ์ฐ์ฐ ์์ ์ด ์ค์ฌ์ด ๋๋ ์ํฉ์์ ๋ฐ์ํฉ๋๋ค.