๋ฉํฐ์ค๋ ๋ฉ, ์ปจํ ์คํธ ์ค์์น, ์ค์ผ์ค๋ง, ํ๋ก์ธ์ค vs ์ค๋ ๋
1. ๋ฉํฐ์ค๋ ๋ฉ์ด ํ์ํ ์ด์
๋ฉํฐ์ค๋ ๋ฉ์ด ํ์ํ ์ฃผ์ ์ด์ ๋ ํฌ๊ฒ ๋๊ฐ์ง๋ก ์๋ต์ฑ(Responsiveness)๊ณผ ์ฑ๋ฅ(Performance)์ด๋ค.
1.1. ์๋ต์ฑ(Responsiveness)
์ฌ์ฉ์ ๊ฒฝํ ์ธก๋ฉด์์ ์๋ต์ฑ์ ์ํํธ์จ์ด ํ์ง์ ๊ฒฐ์ ํ๋ ํต์ฌ ์์์ด๋ค.
- ์ฌ๋ก 1: ์จ๋ผ์ธ ์ผํ๋ชฐ์์ ๋๋ ๊ตฌ๋งค ์์ฒญ์ด DB ์์ ์ ์ง์ฐ์ํฌ ๊ฒฝ์ฐ, ๋ค๋ฅธ ์ฌ์ฉ์์ ์์ฒญ์ด ์ฐจ๋จ๋จ → ๋ฉํฐ์ค๋ ๋ฉ์ผ๋ก ๊ฐ ์์ฒญ์ ๋ณ๋ ์ค๋ ๋์์ ์ฒ๋ฆฌํ๋ฉด ๋์ ์๋ต ๊ฐ๋ฅ
- ์ฌ๋ก 2: ๋์์ ์ฌ์ ์ฑ
- ๋ฉ์ธ ์ค๋ ๋: UI ์ด๋ฒคํธ ์ฒ๋ฆฌ
- ์์ปค ์ค๋ ๋: ๋ฏธ๋์ด ๋์ฝ๋ฉ ๋ฐ ์ถ๋ ฅ → ์ฌ์ฉ์ ์ธํฐ๋์ ์ง์ฐ ์๋ ๋ถ๋๋ฌ์ด ๊ฒฝํ ์ ๊ณต
์ด๋ฌํ ๋์์ฑ(Concurrency)์ ๋ฉํฐ์ค๋ ๋ฉ์ ํตํด ๊ตฌํํ ์ ์์ผ๋ฉฐ, ์ฌ์ง์ด ๋จ์ผ ์ฝ์ด์์๋ ๊ฐ๋ฅํ๋ค.
1.2. ์ฑ๋ฅ(Performance)
๋ฉํฐ์ค๋ ๋ฉ์ ๋จ์ผ ์ค๋ ๋ ๋ฐฉ์์ ๋นํด ๋ณต์กํ ์์ ์ ํจ์ฌ ์งง์ ์๊ฐ ์์ ์๋ฃํ ์ ์๋ ์ฅ์ ์ ๊ฐ์ง๊ณ ์๋ค.
- ๋์์ฑ(Concurrency): ๋จ์ผ ์ฝ์ด์์๋ ์ปจํ ์คํธ ์ค์์น๋ฅผ ํตํด ์ฌ๋ฌ ์์ ์ด ๋์์ ์คํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ์คํ
- ๋ณ๋ ฌ์ฑ(Parallelism): ๋ฉํฐ์ฝ์ด ํ๊ฒฝ์์ ์ค์ ๋ก ์ฌ๋ฌ ์์ ์ ์์ ํ ๋ณ๋ ฌ๋ก ์คํ
๋ฉํฐ ์ค๋ ๋ฉ์ ํตํด ์ป์ ์ ์๋ ์ด์
- ๋ณต์กํ ์์ ์ ํจ์ฌ ์งง์ ์๊ฐ ๋ด์ ์๋ฃ
- ๋์ผํ ์๊ฐ ๋ด์ ๋ ๋ง์ ์์ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ๋๊ท๋ชจ ์๋น์ค ์ด์ ์ ํ์ํ ์๋ฒ ์ ๊ฐ์๋ก ์ธํ ๋น์ฉ ์ ๊ฐ
2. ํ๋ก์ธ์ค์ ์ค๋ ๋
์ปดํจํฐ๋ฅผ ์ผ๋ฉด ์ด์์ฒด์ (OS)๊ฐ ๋์คํฌ์์ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ก๋๋๋ค. ์ด์์ฒด์ ๋ ๊ฐ๋ฐ์๋ค์ด ํ๋์จ์ด์ CPU๋ฅผ ์ง์ ๋ค๋ฃจ์ง ์๊ณ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๋๋ก ์ถ์ํ๋ฅผ ์ ๊ณตํ๋ค.
๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์คํฌ์ ํ์ผ ํํ๋ก ์กด์ฌํ๋ค๊ฐ, ์คํ๋ ๋ ์ด์์ฒด์ ์ ์ํด ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋๋ค.
์ด๋ ๊ฒ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ์ธ์คํด์ค๋ฅผ ํ๋ก์ธ์ค๋ผ ํ๋ค.
ํ๋ก์ธ์ค๊ฐ ํฌํจํ๋ ์ฃผ์ ์์
- ๋ฉํ๋ฐ์ดํฐ(ํ๋ก์ธ์ค ID ๋ฑ)
- ์ด๋ฆฐ ํ์ผ๋ค
- ์คํ๋ ํ๋ก๊ทธ๋จ ์ฝ๋
- ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ํ(heap)
- ์ต์ ํ๋์ ๋ฉ์ธ ์ค๋ ๋
๊ฐ ์ค๋ ๋๊ฐ ํฌํจํ๋ ์ฃผ์ ์์
- ์คํ(์ง์ญ ๋ณ์ ์ ์ฅ ๋ฐ ํจ์ ์คํ)
- ํ๋ก๊ทธ๋จ ์นด์ดํฐ(๋ค์ ์คํํ ๋ช ๋ น์ด์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํด)
๋ฉํฐ์ค๋ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๊ฐ ์ค๋ ๋๊ฐ ์์ ๋ง์ ์คํ๊ณผ ํ๋ก๊ทธ๋จ ์นด์ดํฐ๋ฅผ ๊ฐ์ง์ง๋ง,
ํ๋ก์ธ์ค์ ๋ค๋ฅธ ๊ตฌ์ฑ์์๋ค์ ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ณต์ ํ๋ค.(๋ชจ๋ ์ค๋ ๋๋ ๋์ผํ Code/Heap ์์ญ ๊ณต์ )
๊ตฌ๋ถ | ํ๋ก์ธ์ค | ์ค๋ ๋ |
๋ฉ๋ชจ๋ฆฌ ์์ญ | ๋ ๋ฆฝ์ | Code/Heap ๊ณต์ |
์์ฑ ๋น์ฉ | ๋์ (๋ฉ๋ชจ๋ฆฌ ๋ณต์ ํ์) | ๋ฎ์ |
ํต์ | IPC(ํ์ดํ, ์์ผ ๋ฑ) ํ์ | ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์ง์ ์ ๊ทผ |
์์ ์ฑ | ๊ฐํจ (ํ ํ๋ก์ธ์ค ์ค๋ฅ๊ฐ ํ ํ๋ก์ธ์ค ์ํฅ X) | ์ฝํจ (์ค๋ ๋ ํ๋์ ์ค๋ฅ๊ฐ ์ ์ฒด ํ๋ก์ธ์ค ์ข ๋ฃ ๊ฐ๋ฅ) |
3. ์ปจํ ์คํธ ์ค์์น์ ์ค๋ ๋ ์ค์ผ์ค๋ง
3.1. ์ปจํ ์คํธ ์ค์์น๋?
์ผ๋ฐ์ ์ผ๋ก ํ๋ก์ธ์ค์ ์ค๋ ๋์ ์๋ CPU ์ฝ์ด์ ์๋ณด๋ค ๋ง๋ค. ๋ฐ๋ผ์ ์ด์์ฒด์ ๋ ํ ์ค๋ ๋๋ฅผ ์คํํ๋ค๊ฐ ์ค์งํ๊ณ ๋ค๋ฅธ ์ค๋ ๋๋ฅผ ์คํํ๋ ์์ ์ ๋ฐ๋ณตํด์ผ ํ๋ค. ์ด๋ฌํ ์ ํ ๊ณผ์ ์ ์ปจํ ์คํธ ์ค์์น๋ผ๊ณ ํ๋ค.
์ปจํ ์คํธ ์ค์์น ๋ฐ์ ์กฐ๊ฑด
- ํ์์ฌ๋ผ์ด์ค(Time Slice) ๋ง๋ฃ
- I/O ๋๊ธฐ ๋ฑ ์๋ฐ์ ์๋ณด
- ๋์ ์ฐ์ ์์ ์์ ๋ฐ์
์ปจํ ์คํธ ์ค์์น์ ์ฃผ์ ํน์ง
ํ๊ท ๋ฌธ๋งฅ ๊ตํ ์๊ฐ: 1~10μs (์์คํ ์ฌ์์ ๋ฐ๋ผ ์ฐจ์ด) → ์ด๋น 10,000ํ ๊ตํ ์ 10ms(์ ์ฒด CPU ์๊ฐ์ 1%) ์๋ชจ → ๊ณผ๋ํ ์ค๋ ๋ ์์ฑ์ ์ค๋ ์ฑ(Thrashing) ์ ๋ฐ
- ๋น์ฉ์ด ๋ง์ด ๋๋ ์์
- ๋์ผ ํ๋ก์ธ์ค ๋ด์ ์ค๋ ๋ ๊ฐ ์ ํ์ด ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ค๋ ๋๋ก ์ ํํ๋ ๊ฒ๋ณด๋ค ๋น์ฉ์ด ์ ๊ฒ ๋ฌ
3.2. ์ค๋ ๋ ์ค์ผ์ค๋ง
์ด์์ฒด์ ๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ค๋ ๋๋ฅผ ์ค์ผ์ค๋งํ๋ค.
์ฃผ์ ์ค์ผ์ค๋ง ์ ๋ต
- Fair Share Scheduler: CPU ์๊ฐ์ ํ๋ก์ธ์ค๋ณ๋ก ๊ท ๋ฑ ๋ถ๋ฐฐ
- Completely Fair Scheduler(CFS): Linux ๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ, ๊ฐ์ค์น ๊ธฐ๋ฐ ๋ถ๋ฐฐ
- Real-Time Scheduler: ๋ง๊ฐ์๊ฐ(Deadline) ์ค์ ๋ณด์ฅ
์ฐ์ ์์ ๊ฒฐ์ ์์
- ์ ์ ์ฐ์ ์์: ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ช ์์ ์ค์ (์: RTOS)
- ๋์ ๋ณด์ ๊ฐ:
- I/O ์ง์ฝ์ ์์ → ์ฐ์ ์์ ์์น
- CPU ์ง์ฝ์ ์์ → ์ฐ์ ์์ ํ๋ฝ
์ค์ผ์ค๋ง์ ํตํด ์ป์ ์ ์๋ ์ด์
- ๋ํํ ๋ฐ ์ค์๊ฐ ์ค๋ ๋์ ์ฐ์ ๊ถ ๋ถ์ฌ
- ์ด์ ์ํฌํฌ์์ ์ถฉ๋ถํ ์คํ ์๊ฐ์ ๋ฐ์ง ๋ชปํ ์ฐ์ฐ ์ค๋ ๋์๋ ๊ธฐํ ์ ๊ณต
- ์ค๋ ๋ ๊ธฐ์ ํ์ ๋ฐฉ์ง
4. ํ๋ก์ธ์ค vs ์ค๋ ๋: ์ธ์ ๋ฌด์์ ์ฌ์ฉํด์ผ ํ ๊น?
๋ฉํฐ์ค๋ ๋ ์ ๊ทผ๋ฐฉ์์ด ์ข์ ๊ฒฝ์ฐ
- ์ฌ๋ฌ ์์ ์ด ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํด์ผ ํ ๋
- ๋น ๋ฅธ ์์ฑ๊ณผ ์๋ฉธ์ด ํ์ํ ๋
- ํ์คํฌ ๊ฐ ์ ํ์ด ์์ฃผ ์ผ์ด๋์ผ ํ ๋
- ์์: ์น ์๋ฒ(๋์ ์ฐ๊ฒฐ ์ฒ๋ฆฌ), ๊ฒ์ ์์ง(๋ฌผ๋ฆฌ/๋ ๋๋ง ๋ณ๋ ฌํ)
๋ณ๋์ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ ๊ฒฝ์ฐ
- ๋ณด์๊ณผ ์์ ์ฑ์ด ์ต์ฐ์ ์ผ ๋
- ๊ฒฐํจ ๊ฒฉ๋ฆฌ(Fault Isolation) ํ์ํ ๊ฒฝ์ฐ
- ์์ ๋ค์ด ์๋ก ์์ ํ ๋ ๋ฆฝ์ ์ผ ๋
- ์์: ํฌ๋กฌ ๋ธ๋ผ์ฐ์ (ํญ๋ณ ํ๋ก์ธ์ค ๊ฒฉ๋ฆฌ)
5. ์ฃผ์ ์
- ์ค๋ ๋ ํ(Thread Pool) ํ์ฉ
- ๊ณผ๋ํ ์ค๋ ๋ ์์ฑ ๋ฐฉ์ง
- ์ผ๋ฐ์ ์ผ๋ก (์ฝ์ด ์ * 2) ๊ถ์ฅ
- Lock Contention ํํผ
- Read-Write Lock, Atomic Operation ํ์ฉ
- False Sharing ๋ฌธ์
- ์๋ก ๋ค๋ฅธ ์ค๋ ๋๊ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ธ์ ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์์นํ ๋ณ์๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์์ ํ ๋ ๋ฐ์ํ๋ ์ฑ๋ฅ ์ ํ ํ์
- ์ค์ ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ์ง ์์ง๋ง, ํ๋์จ์ด์ ์บ์ ๋ผ์ธ ์ต์ ํ๋ก ์ธํด ๋ถํ์ํ ์บ์ ๋ฌดํจํ๊ฐ ๋ฐ๋ณต
- ํด๊ฒฐ ๋ฐฉ์ : ํ๋ํจ๋ฉ ์ถ๊ฐ, @Contended ์ ๋ ธํ ์ด์ ์ฌ์ฉ, ์ค๋ ๋ ๋ณ ๋ ๋ฆฝ ๊ฐ์ฒด ์ฌ์ฉํ์ฌ ์บ์ ๊ฒฝ์ ์ ๊ฑฐ, ๋ณ๋์ ํด๋์ค๋ก ๋ถํ
์ฐธ๊ณ ์๋ฃ :
Udemy - Java ๋ฉํฐ์ค๋ ๋ฉ, ๋ณํ์ฑ ๋ฐ ์ฑ๋ฅ ์ต์ ํ - ์ ๋ฌธ๊ฐ ๋๊ธฐ
https://www.geeksforgeeks.org/cpu-scheduling-in-operating-systems/
CPU Scheduling in Operating Systems - GeeksforGeeks
CPU scheduling is a critical operating system function that determines which process uses the CPU at any given time to optimize resource utilization and minimize waiting times through various algorithms like FCFS, SJF, and Round Robin.
www.geeksforgeeks.org
https://developer.chrome.com/docs/extensions/reference/api/processes?hl=ko#type-ProcessType
chrome.processes | API | Chrome for Developers
์ด ํ์ด์ง๋ Cloud Translation API๋ฅผ ํตํด ๋ฒ์ญ๋์์ต๋๋ค. chrome.processes ์ปฌ๋ ์ ์ ์ฌ์ฉํด ์ ๋ฆฌํ๊ธฐ ๋ด ํ๊ฒฝ์ค์ ์ ๊ธฐ์ค์ผ๋ก ์ฝํ ์ธ ๋ฅผ ์ ์ฅํ๊ณ ๋ถ๋ฅํ์ธ์. ์ค๋ช chrome.processes API๋ฅผ ์ฌ์ฉํ์ฌ ๋ธ๋ผ์ฐ
developer.chrome.com