Table of Contents
μ€λ λμ λν΄ λ€λ£¨λ μ±ν°λ‘, ꡬ체μ μΈ λ©ν°μ€λ λ ꡬν λ°©λ²μ΄λ μ½λκ° λ§μ΄ λμ¨λ€.
Threads
μ€λ λλ νλ‘μΈμ€μ μμ νλ¦μ λ§νλ€. νλμ νλ‘μΈμ€κ° ν λ²μ νλμ μμ λ§ μννλ κ²μ μ±κΈμ€λ λ(Single thread)μ΄λ©°, νλμ νλ‘μΈμ€κ° λμμ μ¬λ¬ μμ μ μννλ κ²μ λ©ν°μ€λ λ(Multi thread)λΌκ³ νλ€. νλ‘μΈμμ λ©λͺ¨λ¦¬κ° λ°μ νλ©° κ°λ₯ν΄μ§ κΈ°μ μ΄λ€. λ©ν°νλ‘κ·Έλλ° μμ€ν μ΄λκΉ νλ‘μΈμ€λ₯Ό μ¬λ¬κ° λλ €λ λλλ° κ΅³μ΄ μ€λ λλ₯Ό λλλ λ°λ μ΄μ κ° μλ€.
- λ νλ‘μΈμ€κ° νλμ λ°μ΄ν°λ₯Ό 곡μ νλ €λ©΄ λ©μμ§ ν¨μ±μ΄λ 곡μ λ©λͺ¨λ¦¬ λλ νμ΄νλ₯Ό μ¬μ©ν΄μΌ νλλ°, ν¨μ¨λ λ¨μ΄μ§κ³ κ°λ°μκ° κ΅¬ν, κ΄λ¦¬νκΈ°λ λ²κ±°λ‘λ€.
- νλ‘μΈμ€ μ¬μ΄ 컨ν μ€νΈ μ€μμΉκ° κ³μ μΌμ΄λλ©΄ μ±λ₯ μ νκ° λ°μνλ€. μ€λ λ μ νμλ 컨ν μ€νΈ μ€μμΉκ° μΌμ΄λμ§λ§ μλκ° λ λΉ λ₯΄λ€.
Multithreaded Server Architecture
μλ²μ ν΄λΌμ΄μΈνΈ μ¬μ΄μλ λ©ν°μ€λ λλ₯Ό ꡬννλ€. ν΄λΌμ΄μΈνΈκ° μλ²μκ² μμ²μ 보λ΄λ©΄ μλ²λ μλ‘μ΄ μ€λ λλ₯Ό νλ μμ±ν΄ μμ²μ μννλ€. νλ‘μΈμ€λ₯Ό μμ±νλ κ²λ³΄λ€ μ€λ λλ₯Ό μμ±νλ κ²μ΄ λ λΉ λ₯΄κΈ° λλ¬Έμ΄λ€.
Multicore Programming
μ΄λ κ² λ©ν°μ½μ΄ λλ λ©ν°νλ‘μΈμ μμ€ν μ ꡬνν λλ λμμ±(Concurrency)μ λ³λ ¬μ±(Parallelism)μ μμμΌ νλ€. λμμ±μ μ±κΈ νλ‘μΈμ μμ€ν μμ μ¬μ©λλ λ°©μμΌλ‘, νλ‘μΈμκ° μ¬λ¬ κ°μ μ€λ λλ₯Ό λ²κ°μκ°λ©° μνν¨μΌλ‘μ¨ λμμ μ€νλλ κ²μ²λΌ 보μ΄κ² νλ λ°©μμ΄λ€. λ³λ ¬μ±μ λ©ν°μ½μ΄ μμ€ν μμ μ¬μ©λλ λ°©μμΌλ‘, μ¬λ¬ κ°μ μ½μ΄κ° κ° μ€λ λλ₯Ό λμμ μννλ λ°©μμ΄λ€.
User Threads and Kernel Threads
μ μ μ€λ λλ μ¬μ©μ μμ€μ μ€λ λ λΌμ΄λΈλ¬λ¦¬κ° κ΄λ¦¬νλ μ€λ λλ€. μ€λ λ λΌμ΄λΈλ¬λ¦¬μλ λνμ μΌλ‘ POSIX Pthreads, Win32 threads, Java threadsκ° μλ€. 컀λ μ€λ λλ 컀λμ΄ μ§μνλ μ€λ λλ€. 컀λ μ€λ λλ₯Ό μ¬μ©νλ©΄ μμ μ μ΄μ§λ§ μ μ λͺ¨λμμ 컀λ λͺ¨λλ‘ κ³μ λ°κΏμ€μΌ νκΈ° λλ¬Έμ μ±λ₯μ΄ μ νλλ€. λ°λλ‘ μ μ μ€λ λλ₯Ό μ¬μ©νλ©΄ μμ μ±μ λ¨μ΄μ§μ§λ§ μ±λ₯μ΄ μ νλμ§λ μλλ€.
Multithreading Models
μ μ μ€λ λμ 컀λ μ€λ λμ κ΄κ³λ₯Ό μ€κ³νλ μ¬λ¬κ°μ§ λ°©λ²μ΄ μλ€.
Many-to-One Model
νλμ 컀λ μ€λ λμ μ¬λ¬ κ°μ μ μ μ€λ λλ₯Ό μ°κ²°νλ λͺ¨λΈμ΄λ€. ν λ²μ νλμ μ μ μ€λ λλ§ μ»€λμ μ κ·Όν μ μκΈ° λλ¬Έμ λ©ν°μ½μ΄ μμ€ν μμ λ³λ ¬μ μΈ μνμ ν μκ° μλ€. μμ¦μλ μ μ¬μ©λμ§ μλ λ°©μμ΄λ€.
One-to-One Model
νλμ μ μ μ€λ λμ νλμ 컀λ μ€λ λκ° λμνλ λͺ¨λΈμ΄λ€. λμμ±μ λμ¬μ£Όκ³ , λ©ν°νλ‘μΈμ μμ€ν μμλ λμμ μ¬λ¬ μ€λ λλ₯Ό μνν μ μλλ‘ ν΄μ€λ€. μ μ μ€λ λλ₯Ό λ리면 컀λ μ€λ λλ λκ°μ΄ λμ΄λλλ°, 컀λ μ€λ λλ₯Ό μμ±νλ κ²μ μ€λ²ν€λκ° ν° μμ μ΄κΈ° λλ¬Έμ μ±λ₯ μ νκ° λ°μν μ μλ€.
Many-to-Many Model
μ¬λ¬ μ μ μ€λ λμ λ μ κ±°λ κ°μ μμ 컀λ μ€λ λκ° λμνλ λͺ¨λΈμ΄λ€. μ΄μ체μ λ μΆ©λΆν μμ 컀λ μ€λ λλ₯Ό λ§λ€ μ μμΌλ©°, 컀λ μ€λ λμ ꡬ체μ μΈ κ°μλ νλ‘κ·Έλ¨μ΄λ μλ κΈ°κΈ°μ λ°λΌ λ€λ₯΄λ€. λ©ν°νλ‘μΈμ μμ€ν μμλ μ±κΈνλ‘μΈμ μμ€ν λ³΄λ€ λ λ§μ 컀λ μ€λ λκ° λ§λ€μ΄μ§λ€.
Two-level Model
Many-to-Many λͺ¨λΈκ³Ό λΉμ·νλ°, νΉμ μ μ μ€λ λλ₯Ό μν 컀λ μ€λ λλ₯Ό λ°λ‘ μ 곡νλ λͺ¨λΈμ λ§νλ€. μ μ μ¨μ΄ λμμΌ νλ μ μ μ€λ λλ₯Ό λ λΉ λ₯΄κ² μ²λ¦¬ν΄μ€ μ μλ€.
Thread Pools
μ€λ λλ₯Ό μμ²ν λλ§λ€ λ§€λ² μλ‘μ΄ μ€λ λλ₯Ό μμ±νκ³ , μννκ³ , μ§μ°κ³ λ₯Ό λ°λ³΅νλ©΄ μ±λ₯μ΄ μ νλλ€. κ·Έλμ 미리 μ€λ λ νμ μ¬λ¬ κ°μ μ€λ λλ₯Ό λ§λ€μ΄λκ³ μμ²μ΄ μ€λ©΄ μ€λ λ νμμ μ€λ λλ₯Ό ν λΉν΄μ£Όλ λ°©λ²μ μ¬μ©νλ€.