๐ฅ ๊ณต์ ์ฑ(Fairness)์ด๋?
๊ณต์ ํ ์ ๊ธ(Fair Lock)์ด๋ ์ค๋ ๊ธฐ๋ค๋ฆฐ ์ค๋ ๋๊ฐ ๋จผ์ ๋ฝ์ ํ๋ํ ์ ์๋๋ก ๋ณด์ฅํ๋ ๋ฐฉ์์ ์๋ฏธ
์ฆ, FIFO(First In, First Out) ๋ฐฉ์์ผ๋ก ๋ฝ์ ๊ด๋ฆฌ
โ ReentrantLock์์ ๊ณต์ ์ฑ ๋ชจ๋ ์ค์
Java์ ReentrantLock์ ๊ณต์ ์ฑ(Fair) ๋ชจ๋๋ฅผ ์ง์ํ๋ฉฐ, ์์ฑ์์์ ์ค์ ํ ์ ์์ด.
// ๊ณต์ ํ ๋ฝ (FIFO ๋ฐฉ์)
ReentrantLock lock = new ReentrantLock(true);
// ๋น๊ณต์ ํ ๋ฝ (๊ธฐ๋ณธ๊ฐ)
ReentrantLock lock = new ReentrantLock(false);
- true → ๊ณต์ ํ ๋ฝ (Fair Lock)
- false → ๋น๊ณต์ ํ ๋ฝ (Unfair Lock, ๊ธฐ๋ณธ๊ฐ)
โ ๊ณต์ ํ ๋ฝ(Fair Lock)์ ํน์ง
- ๋๊ธฐ ์๊ฐ์ด ๊ธด ์ค๋ ๋๊ฐ ๋จผ์ ๋ฝ์ ํ๋ํ ์ ์์
- FIFO ๋ฐฉ์์ผ๋ก ๋์ํ์ฌ, ๋๊ธฐ ์ค์ธ ์ค๋ ๋๊ฐ ์ ์ ๋์ง ์์
- Starvation(๊ธฐ์ ์ํ) ๋ฐฉ์ง: ํน์ ์ค๋ ๋๊ฐ ์์ํ ๋ฝ์ ์ป์ง ๋ชปํ๋ ์ํฉ์ ๋ฐฉ์ง
โ ๊ณต์ ํ ๋ฝ vs ๋น๊ณต์ ํ ๋ฝ, ์ธ์ ์ฌ์ฉํด์ผ ํ ๊น?
๊ตฌ๋ถ | ๊ณต์ ํ ๋ฝ (Fair Lock) | ๋น๊ณต์ ํ ๋ฝ (Unfair Lock) |
๋ฝ ํ๋ ์์ | ์ค๋ ๊ธฐ๋ค๋ฆฐ ์ค๋ ๋๊ฐ ๋จผ์ ํ๋ (FIFO) | ๋ฐฉ๊ธ ์์ฒญํ ์ค๋ ๋๊ฐ ๋ฝ์ ๋จผ์ ํ๋ํ ์๋ ์์ |
์ฑ๋ฅ | ์๋๊ฐ ๋๋ฆผ (์ถ๊ฐ์ ์ธ ๋๊ธฐ ๊ด๋ฆฌ ํ์) | ์๋๊ฐ ๋น ๋ฆ (OS๊ฐ ์ ์ฐํ๊ฒ ์ฒ๋ฆฌ) |
Starvation(๊ธฐ์ ํ์) | ์์ | ๊ฐ๋ฅ์ฑ ์์ |
์ถ์ฒ ์ฌ์ฉ ์ฌ๋ก | ๋๊ธฐ ์์๊ฐ ์ค์ํ ๊ฒฝ์ฐ (ex. ์ํ ์์คํ ) | ์ฑ๋ฅ์ด ์ค์ํ ๊ฒฝ์ฐ (ex. ๊ณ ์ฑ๋ฅ ์๋ฒ) |
โ ๊ณต์ ํ ๋ฝ์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ
- ๊ธฐ์(Starvation) ํ์์ ๋ฐฉ์งํด์ผ ํ ๋
- ํน์ ์ค๋ ๋๊ฐ ๊ณ์ํด์ ๋ฝ์ ์ป์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ฅผ ๋ฐฉ์งํด์ผ ํ ๊ฒฝ์ฐ
- (์) ํฐ์ผ ๋ฐ๊ถ ์์คํ , ์ํ ๊ฑฐ๋ ์ฒ๋ฆฌ ์์คํ
- ์ค๋ ๋ ๊ฐ์ ๊ณต์ ์ฑ์ด ์ค์ํ ๊ฒฝ์ฐ
- ์: ๋ฉํฐ์ ์ ํ๊ฒฝ์์ ์์ฒญ์ ๊ณตํํ๊ฒ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ
โ ๊ณต์ ํ ๋ฝ์ ์ฌ์ฉํ์ง ๋ง์์ผ ํ๋ ๊ฒฝ์ฐ
- ์ฑ๋ฅ์ด ์ค์ํ ๊ฒฝ์ฐ
- ๊ณต์ ํ ๋ฝ์ ๋ฝ์ ๋๊ธฐํ๋ ๊ด๋ฆฌ ๋น์ฉ์ด ์ถ๊ฐ๋๋ฏ๋ก ์๋๊ฐ ๋๋ ค์ง ์ ์์
- (์) ๊ณ ์ฑ๋ฅ ์๋ฒ, ๋์์ฑ์ด ๋์ ์ ํ๋ฆฌ์ผ์ด์
- ๋ฝ ๊ฒฝ์์ด ์ฌํ์ง ์์ ๊ฒฝ์ฐ
- ์ด์ฐจํผ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ฆ์ ๋ฝ์ ํ๋ํ ์ ์๋ค๋ฉด ๊ตณ์ด ๊ณต์ ํ ๋ฝ์ ์ฌ์ฉํ ํ์ ์์
์ ๋ฆฌ
โ ๊ณต์ ํ ๋ฝ(Fair Lock): ์ค๋ ๊ธฐ๋ค๋ฆฐ ์ค๋ ๋๊ฐ ์ฐ์ ์ ์ผ๋ก ๋ฝ์ ํ๋ (FIFO), ๊ธฐ์ ํ์ ๋ฐฉ์ง
โ ๋น๊ณต์ ํ ๋ฝ(Unfair Lock): ์๋ก ์์ฒญํ ์ค๋ ๋๋ ๋ฝ์ ํ๋ ๊ฐ๋ฅ, ์ฑ๋ฅ์ด ๋ ๋น ๋ฆ
โ ๊ณต์ ํ ๋ฝ์ ์ฌ์ฉํ๋ฉด ๋๊ธฐ ์๊ฐ์ด ๋ณด์ฅ๋์ง๋ง, ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์์.
โ ์ผ๋ฐ์ ์ผ๋ก Java์์๋ ๋น๊ณต์ ํ ๋ฝ์ด ๊ธฐ๋ณธ๊ฐ์ด๋ฉฐ, ์ฑ๋ฅ์ด ๋ ์ ๋ฆฌํ ๊ฒฝ์ฐ๊ฐ ๋ง์.
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] ์ ์๋ฐ์์ GC๋ฅผ ์ง์ ํธ์ถํ๋ฉด ์๋๋๊ฐ? (0) | 2025.04.14 |
---|---|
[Java] ๋์์ฑ๊ณผ ๋ณ๋ ฌ์ฑ ๊ฐ๋ ๊ณผ ์ฐจ์ด์ (0) | 2025.02.08 |
[์๊ณ ๋ฆฌ์ฆ] ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (0) | 2024.03.17 |