λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

4μ£Όμ°¨

by syLim___ 2025. 1. 23.
728x90

πŸ“Œ λ™μ‹œμ„±κ³Ό 병렬성

- λ™μ‹œμ„± : ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€μ—μ„œ μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ 맀우 λΉ λ₯΄κ²Œ λ²ˆκ°ˆμ•„κ°€λ©° μ‹€ν–‰λ˜μ–΄ λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄λŠ” 것

- 병렬성 : λ©€ν‹°μ½”μ–΄ ν”„λ‘œμ„Έμ„œλ₯Ό μ΄μš©ν•˜μ—¬ μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€μ—μ„œ μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ μ‹€μ œλ‘œ λ™μ‹œμ— μ‹€ν–‰λ˜λŠ”κ²ƒ

 

πŸ“Œ μžλ°” μŠ€λ ˆλ“œ 생λͺ…μ£ΌκΈ°(μƒνƒœ)

new, runnable, blocked, waiting, timed_waiting, terminated

 

πŸ“Œ λ©”λͺ¨λ¦¬ κ°€μ‹œμ„± 문제

λ©€ν‹°μŠ€λ ˆλ“œ ν™˜κ²½μ—μ„œλŠ” 각 μŠ€λ ˆλ“œκ°€ 독립적인 μΊμ‹œ λ©”λͺ¨λ¦¬λ₯Ό κ°€μ§€κ³  μžˆλ‹€.

각 μŠ€λ ˆλ“œμ—μ„œλŠ” μ–΄λ–€ λ©”λͺ¨λ¦¬ 값에 μ ‘κ·Όν•  λ•Œ, 메인 λ©”λͺ¨λ¦¬μ— λ°”λ‘œ μ ‘κ·Όν•˜λŠ” 것이 μ•„λ‹ˆλΌ, μŠ€λ ˆλ“œμ˜ μΊμ‹œλ©”λͺ¨λ¦¬μ— 접근을 ν•œλ‹€.

 

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œκ°€ λ³€κ²½ν•œ 데이터가 λ‹€λ₯Έ μŠ€λ ˆλ“œ μΊμ‹œ λ©”λͺ¨λ¦¬μ— μ¦‰μ‹œ λ°˜μ˜λ˜μ§€ μ•ŠλŠ” κ²½μš°κ°€ λ°œμƒν•  수 μžˆλ‹€.

이것을 λ©”λͺ¨λ¦¬ κ°€μ‹œμ„± 문제라고 ν•œλ‹€.

 

 

πŸ“Œ Volatile ν‚€μ›Œλ“œ

 

μžλ°”μ—μ„œλŠ” λ©”λͺ¨λ¦¬ κ°€μ‹œμ„± 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ volatileμ΄λΌλŠ” ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

volatile λ³€μˆ˜μ˜  값을 μ½κ±°λ‚˜ μ“Έ λ•Œμ—λŠ” 항상 μΊμ‹œλ©”λͺ¨λ¦¬κ°€ μ•„λ‹Œ 메인메λͺ¨λ¦¬μ— λ°”λ‘œ μ ‘κ·Όν•˜κ²Œ λœλ‹€.

 

πŸ“Œ λ™μ‹œμ„± 문제

μ—¬λŸ¬ 개의 μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— 싀행될 λ•Œ λ°œμƒν•  수 μžˆλŠ” 문제λ₯Ό λ§ν•œλ‹€.

- μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— 같은 데이터에 μ ‘κ·Όν•˜μ—¬ μˆ˜μ •ν•˜λŠ” 경우, λ°μ΄ν„°μ˜ 일관성이 깨질 수 μžˆλ‹€.

- μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— μ‹€ν–‰λ˜λ©΄μ„œ λ°μ΄ν„°μ˜ κ°’μ΄λ‚˜ μƒνƒœκ°€ μ˜ˆμƒκ³Ό λ‹€λ₯΄κ²Œ 변경될 수 μžˆλ‹€.

- λ°λ“œλ½ λ°œμƒ κ°€λŠ₯

 

πŸ“Œ synchronized ν‚€μ›Œλ“œ

 

μžλ°”μ—μ„œλŠ” λ™μ‹œμ„± 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ synchronized ν‚€μ›Œλ“œλ₯Ό μ œκ³΅ν•œλ‹€.

λ©”μ„œλ“œ, 블둝 λ˜λŠ” 객체에 μ μš©ν•  수 있으며, λ©€ν‹°μŠ€λ ˆλ“œ ν™˜κ²½μ—μ„œ 곡유 μžμ›μ— μ•ˆμ „ν•˜κ²Œ μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•΄μ€€λ‹€.

 

 

πŸ“Œ λ™μž‘ 방식

μžλ°”μ—μ„œ λͺ¨λ“  μΈμŠ€ν„΄μŠ€λŠ” λͺ¨λ‹ˆν„° 락을 ν•˜λ‚˜μ”© κ°€μ§€κ³  μžˆλ‹€.

μ–΄λ–€ μŠ€λ ˆλ“œκ°€ synchronized λ©”μ„œλ“œλ‚˜ 블둝에 μ ‘κ·Όν•˜λ €λ©΄ ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€μ˜ λͺ¨λ‹ˆν„° 락을 νšλ“ν•΄μ•Ό ν•œλ‹€.

λ§Œμ•½ λͺ¨λ‹ˆν„° 락 νšλ“μ— μ‹€νŒ¨ν•˜λ©΄, ν•΄λ‹Ή μŠ€λ ˆλ“œλŠ” 락을 νšλ“ν•  λ•ŒκΉŒμ§€ λ¬΄ν•œμ • λŒ€κΈ°ν•œλ‹€.

 

πŸ₯ λͺ¨λ‹ˆν„° 락 μ—­ν• 

- λͺ¨λ‹ˆν„° 락은 Critical Section(μž„κ³„κ΅¬μ—­)을 λ³΄ν˜Έν•˜λŠ” 역할을 ν•œλ‹€.
- μž„κ³„ κ΅¬μ—­μ΄λž€ 곡유 μžμ›μ— λŒ€ν•œ 접근이 ν•„μš”ν•œ μ½”λ“œ λΈ”λ‘μœΌλ‘œ, ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œλ§Œ μ ‘κ·Όν•  수 μžˆλŠ” μ˜μ—­μ΄λ‹€.
  μ—¬κΈ°μ—μ„œλŠ” synchronized μ½”λ“œλΈ”λŸ­μ„ λ§ν•œλ‹€.
- λͺ¨λ‹ˆν„° 락을 νšλ“ν•œ μŠ€λ ˆλ“œλŠ” ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€μ˜ μž„κ³„ ꡬ역에 λŒ€ν•΄ 독점적인 μ ‘κ·Ό κΆŒν•œμ„ κ°€μ§€κ²Œ λœλ‹€.
- μŠ€λ ˆλ“œκ°€ 싀행을 끝내고 λͺ¨λ‹ˆν„° 락을 λ°˜ν™˜ν•˜λ©΄, λŒ€κΈ° 쀑인 μŠ€λ ˆλ“œ 쀑 ν•˜λ‚˜κ°€ 락을 νšλ“ν•˜κ²Œ λœλ‹€.

 

πŸ“Œ synchronized ν‚€μ›Œλ“œλŠ” μ–Έμ œ μ‚¬μš©ν•΄μ•Ό ν• κΉŒ?

- ν•˜λ‚˜μ˜ 객체λ₯Ό μ—¬λŸ¬ μŠ€λ ˆλ“œμ—μ„œ λ™μ‹œμ— μ‚¬μš©ν•  경우

- static으둜 μ„ μ–Έν•œ 객체λ₯Ό μ—¬λŸ¬ μŠ€λ ˆλ“œμ—μ„œ λ™μ‹œμ— μ‚¬μš©ν•  경우

 

πŸ“Œ synchronized ν‚€μ›Œλ“œμ˜ 문제점

- μ–΄λ–€ μŠ€λ ˆλ“œκ°€ synchronized λ©”μ„œλ“œλ‚˜ 블둝에 μ ‘κ·Όν•˜λ €κ³  ν• λ•Œ, λͺ¨λ‹ˆν„° 락 νšλ“μ„ μ‹€νŒ¨ν•œλ‹€λ©΄

  ν•΄λ‹Ή μŠ€λ ˆλ“œλŠ” λͺ¨λ‹ˆν„° 락을 νšλ“ν•  λ•ŒκΉŒμ§€ blocked μƒνƒœλ‘œ λŒ€κΈ°ν•˜κ²Œ λœλ‹€.

- μ΄λ•Œ νƒ€μž„μ•„μ›ƒ 섀정도 λΆˆκ°€λŠ₯ν•˜κ³ , interrupt λ“±μœΌλ‘œ λŒ€κΈ°μ€‘μΈ μŠ€λ ˆλ“œλ₯Ό 깨울 μˆ˜λ„ μ—†λ‹€.

- 즉 μŠ€λ ˆλ“œλŠ” λͺ¨λ‹ˆν„° 락을 νšλ“ν•  λ•ŒκΉŒμ§€ λ¬΄ν•œμ • λŒ€κΈ°ν•˜κ²Œ 되고, 이런 μƒν™©μ—μ„œ λ°λ“œλ½μ΄ λ°œμƒν•  수 μžˆλ‹€.

 

- λ˜ν•œ λͺ¨λ‹ˆν„°λ½μ΄ λ°˜ν™˜λ˜μ—ˆμ„ λ•Œμ—λ„ λŒ€κΈ° μŠ€λ ˆλ“œ 쀑 μ–΄λ–€ μŠ€λ ˆλ“œκ°€ 락을 νšλ“ν• μ§€ μ•Œ 수 μ—†μœΌλ―€λ‘œ μŠ€λ ˆλ“œ κΈ°μ•„ μƒνƒœ(starvaton)κ°€ λ°œμƒν•  수 μžˆλ‹€.

 

728x90