1. μ°λ λ νμ (Thread Type)
[1] μ±κΈ-μ½μ΄, μ±κΈ μ°λ λ(single-core,single-thread)

μμ μ CPU λ νλμ μ½μ΄μ νλμ 물리 μ°λ λ(H/W thread) λ₯Ό λ§€νν΄ κ΄λ¦¬νλ€. νμ§λ§ νλ‘μΈμ€μ λκΈ° μμ μΌλ‘ μΈν΄ μ°λ λκ° λκΈ°νκ±°λ νλ‘κ·Έλ¨μ λ©λͺ¨λ¦¬μ λ°μ΄ν°λ₯Ό μ μ¬νλ μκ°μλ CPU core λ₯Ό νμ©νμ§ λͺ»νλ λ¬Έμ κ° μμλ€. μ΄μ κ°μ λ¬Έμ λ₯Ό κ°μ νκ³ μ λμ λ λ°©λ²μ΄ νμ΄νΌ μ°λ λ(hyper thread) μ΄λ€. νμ΄νΌ μ°λ λ(hyper thread) λ νλμ μ½μ΄μ λ κ°μ 물리 μ°λ λ(H/W thread) λ₯Ό ν λΉν΄ core μ ν¨μ¨μ λνλ λ°©λ²μ΄ λμ λλ€.
[2] νλμ¨μ΄ μ°λ λ(hardware thread)

물리 μ°λ λ(H/W thread) λ OS κ΄μ μλ κ°μ μ½μ΄(logical core) μ΄λ€. λ§μ½ μ±κΈ μ½μ΄ CPU μ H/W thread κ° λ κ°λΌλ©΄ OS κ΄μ μμλ λμΌ μ½μ΄λ‘ μΈμνμ¬ OS λ 벨 μ€λ λλ₯Ό μ€μΌμ€λ§νλ€.
[3] 컀λ μ°λ λ(kernel thread)


컀λ(kernel) μ μ΄μ체μ μ ν΅μ¬μ΄λ€. μμ€ν μ λ°μ κ΄λ¦¬/κ°λ νλ©°, νλμ¨μ΄(H/W) κ΄λ ¨λ μμ μ μ§μ μννμ¬ μμμ 보νΈνλ μν μ νλ€. μ΄μ체μ μμλ ν¬κ² kernel thread μ user thread λ‘ λλλλ° μ»€λ λ 벨μμ μμ±λκ³ κ΄λ¦¬λλ μ€λ λλ OS thread λΌ λΆλ₯Έλ€. OS thread λ CPU λ₯Ό μ€μ λ‘ μ€ννλ λ¨μμ΄λ©°, CPU μ€μΌμ€λ§ λ¨μμ΄λ€. OS μ€λ λλ 컨ν μ€νΈ μ€μμΉ λ 컀λμ΄ μ§μ κ°μ νκΈ° λλ¬Έμ κ·Έλ§νΌ λΉμ©μ΄ λ°μνλ€. μ¬μ©μ μ½λ, 컀λ μ½λ λͺ¨λ OS thread μμ μ€νλλ€. (λ€λ₯Έ μ©μ΄λ‘ native thread, kernel thread, kernel-level thread, os-level thread μ΄λ€.)
[4] μ μ μ°λ λ(user thread)


μ μ μ°λ λλ μ μ λ 벨μμ μμ±λκ³ κ΄λ¦¬λλ μ°λ λμ΄λ€. μ€λ λ κ°λ μ νλ‘κ·Έλλ° λ λ²¨λ‘ μΆμνν κ²μ λ§νλ€. κ°μ₯ λνμ μΈ μ¬λ‘κ° Java μ΄λ€. java.lang.Thread ν΄λμ€λ₯Ό run() λ©μλλ₯Ό νμΈν΄λ³΄λ©΄ start0() λ©μλκ° JNI(Java native interface) μμ μ 곡νλ native method μμ νμΈν΄λ³Ό μ μλ€. ν΄λΉ μ΄μ체μ κ° λ¦¬λ μ€μ κ²½μ° clone() system call μ νΈμΆν΄ os-level thread λ₯Ό μμ±νκ³ Java μ thread(platform thread) μ λ§€νλλ€. (μ μ μ°λ λλ CPU μμ μ€νλκΈ° μν΄μλ OS μ°λ λμ λ°λμ λ§€νλμ΄μΌ νλ€.)
2. μ°λ λ λͺ¨λΈ (Thread model)

[1] One-To-One
νλμ OS thread μ νλμ user thread κ° λ§€νλλ λ°©μμ λ°νλ€. μ΄ λ°©μμ μ€λ λ μ€μΌμ€λ§μ OS μ μμν΄ μ»€λμ΄ μννλ€. λͺ¨λ κ°μ Process μ μνλ μ°λ λμ κ²½μ° νλμ user thread block I/O λ₯Ό μνν΄λ λ€λ₯Έ μ°λ λλ μ μ λμνλ€.
[2] Many-To-One
νλμ OS thread μ μ¬λ¬ κ°μ user thread κ° λ§€νλλ λ°©μμ λ§νλ€. μ΄ λ°©μμ 컨ν μ€νΈ μ€μμΉμ΄ λΉ λ₯΄λ€. 컀λ μ°λ λμ κ°μ μ΄ μκΈ° λλ¬Έμ΄λ€. μ΄ λ°©μμ OS level μμ race condition μ΄ λ°μνμ§ μκ³ user thread κ°μ race condition μ΄ λ°μν΄ μλμ μΌλ‘ race condition μ΄ λ°μ νλ₯ μ΄ μ λ€. νμ§λ§ user thread μμ blcok I/O κ° λ°μνλ©΄ λ€λ₯Έ user thread λͺ¨λ block λ μ μλ λ¨μ μ΄ μμ΄ μ μν΄μΌ νλ€. Java 21 μ virtual thread λμ νλ©° user thread λ₯Ό μ§μνλ€.
[3] Many-To-Many
μ¬λ¬ κ°μ OS thread μ μ¬λ¬ κ°μ user thread κ° λ§€νλλ λ°©μμ λ§νλ€. λ λͺ¨λΈμ λ¨μ μ λͺ¨λ νμ©ν λͺ¨λΈμ΄λ©°, Go μΈμ΄μμ μ§μνλ λͺ¨λΈλ‘ μλ €μ Έ μλ€.
Reference
'π computer-science' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| μΊμ μ 리 (Cache Summary) (0) | 2025.03.09 |
|---|---|
| ν΄μ ν μ΄λΈ(Hash Table) (0) | 2024.02.19 |
| Multi Programming, Processing, Tasking, Threading (0) | 2024.02.16 |
| κ°μ λ©λͺ¨λ¦¬ (Virtual Memory) (0) | 2024.01.26 |
