νλͺ© | μ μ | λΉκ³ |
---|---|---|
νλ‘μΈμ€ | - μ»΄ν¨ν°μμ νΉμ ν μμ λ©λͺ¨λ¦¬λ₯Ό ν λΉ λ°μ μ€νλκ³ μλ νλ‘κ·Έλ¨ | |
μ€λ λ | νλμ νλ‘μΈμ€ λ΄μμ μ§νλλ κ°λ³μ μΈ λ¨μ | - μ¬μ© μ΄μ : νλ‘κ·Έλ¨μ μ¬λ¬ λΆλΆμ λμμ μ€ννμ¬ ν¨μ¨μ±μ μ¦κ°μν€κ³ μλ΅μ±μ ν₯μμν¬ μ μμ. |
λμμ± - νλμ μμ λ΄μμ μ¬λ¬ κ°μΒ μλΈ νμ€ν¬(subtask)λ₯Ό λμμ μ²λ¦¬νλ κ²μ λ§νλ€. μ΄λ μ¬λ¬ κ°μ μ€λ λλ₯Ό μμ±νμ¬ νλμ μμ μ λΆν νμ¬ μ²λ¦¬νκ±°λ, λΉλκΈ°μ μΌλ‘ μ¬λ¬ κ°μ μμ μ μ²λ¦¬νλ κ² λ±μ λ§νλ€. | - νλμ¨μ΄μ μΈ μΈ‘λ©΄μΌλ‘ 보μμ λλ λ©ν°νμ€νΉμ΄ λμμ±λ³΄λ€ μμμ μΈμλ‘ μμΉν΄μλ€. | | λ³λ ¬μ± vs λμμ± | λμμ±: νλμ μμ€ν μ΄ μ¬λ¬ μμ μ λμμ μ²λ¦¬νλ κ²μ²λΌ 보μ΄κ² νλ κ² (μ€μ λ‘λ λ²κ°μκ°λ©° μ²λ¦¬) λ³λ ¬μ±: λ³λ ¬μ±μ μ¬λ¬ μμ μ μ€μ λ‘ λμμ μ²λ¦¬νλ κ²μ΄λ€. | - λ³λ ¬μ±κ³Ό λμμ±μ λΉμ·ν΄ 보μ΄μ§λ§ μμ ν λ€λ₯Έ κ°λ μ΄λ€. λ³λ ¬μ±μ μ¬λ¬ μμ μ΄ λμμ μ€νλλ κ²μ΄μ§λ§, μ΄λ¬ν μμ λ€μ κ°κ°μ΄ λ 립μ μΌλ‘ μ€νλλ©° μλ‘ μν₯μ μ£Όμ§ μλλ€. λ°λ©΄μ λμμ±μ μλ‘ λ€λ₯Έ μμ λ€μ΄ μλ‘ μν₯μ μ£Όλ©΄μ λμμ μ€νλλ κ²μ²λΌ 보μΈλ€.
λμμ± - μ±κΈ μ½μ΄μμ λ©ν° μ°λ λ(Multi thread)λ₯Ό λμ μν€λ λ°©μ (λ Όλ¦¬μ μΈ κ°λ ) λ³λ ¬μ± - λ©ν° μ½μ΄μμ λ©ν° μ°λ λ(Multi thread)λ₯Ό λμμν€λ λ°©μ (물리μ μΈ κ°λ ) | | μ€λ λλ₯Ό μμμΌνλ μ΄μ | 1. **λ©λͺ¨λ¦¬ 곡κ°μ λ λ¦½μ± κ΄λ ¨ λ¬Έμ μν© κ° μ€λ λλ κ³ μ ν μ€νμ κ°μ§κ³ μμ΄μ μ€λ λμ ν¨μ νΈμΆκ³Ό μ§μ λ³μλ λ€λ₯Έ μ€λ λμ λ 립μ μΌλ‘ κ΄λ¦¬λλ€. μ΄λ° ꡬ쑰λ μ¬λ¬ μ€λ λκ° λμΌν λ©λͺ¨λ¦¬ 곡κ°μ μ κ·Όν λ λκΈ°ν λ¬Έμ λ₯Ό μΌμΌν¬ μ μλ€. μλ₯Ό λ€μ΄, νλμ μ€λ λκ° κ³΅μ λ λ°μ΄ν°λ₯Ό μμ νλ λμ λ€λ₯Έ μ€λ λλ λμΌν λ°μ΄ν°μ μ κ·Όνλ €κ³ νλ©΄ λ°μ΄ν° 무결μ±μ΄ κΉ¨μ§ μ μλ€. μ΄λ₯Ό κ΄λ¦¬νκΈ° μν΄μλ μ€λ λ κ°μ λ©λͺ¨λ¦¬ μ κ·Όμ μ μ‘°μ νκ³ , νμν κ²½μ° λ½μ΄λ λ€λ₯Έ λκΈ°ν λ©μ»€λμ¦μ μ¬μ©νμ¬ λ°μ΄ν°μ μΌκ΄μ±κ³Ό μμ μ±μ μ μ§ν΄μΌ νλ€.
μμ λμ λ°©μ§ κ΄λ ¨ λ¬Έμ μν© μ€λ λκ° μμ±λκ³ μ’ λ£λ λ, μμμ ν λΉκ³Ό ν΄μ κ° μ μ ν μ΄λ£¨μ΄μ§μ§ μμΌλ©΄ μμ λμκ° λ°μν μ μλ€. μλ₯Ό λ€μ΄, μ€λ λκ° νμΌ νΈλ€λ¬λ λ€νΈμν¬ μ°κ²°, λ©λͺ¨λ¦¬ ν λΉ λ±μ μ¬μ©νκ³ μ΄λ₯Ό μ λλ‘ ν΄μ νμ§ μλλ€λ©΄, μμ€ν μ μ±λ₯ μ νλ μΆ©λμ μ΄λν μ μλ€.
λμμ± λ¬Έμ ν΄κ²° κ΄λ ¨ λ¬Έμ μν© μ€λ λλ λ 립μ μΌλ‘ μ€νλλ©΄μ λμμ μ¬λ¬ μμ μ μνν μ μλ€. μ΄λ¬ν λμμ±μ νλ‘κ·Έλ¨μ μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ§λ§, λμμ μ¬λ¬ μ€λ λκ° κ°μ μμμ μ κ·Όνλ €κ³ ν λ κ²½μ 쑰건(race condition)μ΄λ κ΅μ°© μν(deadlock) κ°μ λμμ± κ΄λ ¨ λ¬Έμ κ° λ°μν μ μλ€.** | | | 컨ν μ€νΈ μ€μμΉ | ν μ€λ λμ μνλ₯Ό λ€λ₯Έ μ€λ λλ‘ μ λ¬ν΄μ£Όλ κ³Όμ | | | λμμ± κ΄λ¦¬ | λμμ μ€νλλ μμ λ€ κ°μ μΆ©λμ μ΅μν | | | μ€λ²ν€λ | - νΉμ μμ μ μννκΈ° μν΄ νμν μ²λ¦¬ μκ°, λ©λͺ¨λ¦¬, λλ λ€λ₯Έ μ»΄ν¨ν μμμ μ΄κ³Όνμ¬ μ¬μ©λλ λΆλΆ
non-blocking
Β λ°©μμ μ¬μ©νλ€λ μ μμ μ°¨μ΄μ μ΄ μ‘΄μ¬νλ€. | - CAS μκ³ λ¦¬μ¦
μ μ¬μ© |
| μλ° μΈμ΄μμ μ§μνλ λμμ± κ΄λ¦¬ | - synchronized, volatile, AtomicInteger 3κ°μ§κ° μκ³ , κ°μ₯ μ’μ λ°©λ²μ AtomicIntegerμ΄λ€. | |2κ° μ€λ λμμ ν μΌμ 2κ°μ νλ‘μΈμ€μμ νλ©΄ μλλμ?
κ·ΈλΌ λ°λλ‘ μκ°νλ©΄, νλ‘μΈμ€λ₯Ό μ΅λν μ κ² μ¬μ©νκ³ μ€λ λλ₯Ό μ΅λν λ§μ΄ μ¬μ©νλ©΄ μ’μκ±°λ€μ?
λ©ν° μ½μ΄μμ λ©ν° μ°λ λλ₯Ό λ³λ ¬μ±μΌλ‘ λμμν¬λ (μ¬λ¬ μμ μ΄ λμμ μ€νλλ©° μλ‘ μν₯μ μ£Όμ§ μλλ€κ³ νλλ°, κ·ΈλΌ) μ€λ λ μ¬μ΄μ 컨ν μ€νΈ μ€μμΉμ΄ μ μΌμ΄λλ€λ λ§μΈκ°μ? μ! νμ§λ§ μ½μ΄ μλ³΄λ€ λ§μ μ€λ λκ° μ‘΄μ¬νλ κ²½μ°μλ 컨ν μ€νΈ μ€μμΉμ΄ μΌμ΄λ μ μλ€.