thread type & model

2024. 2. 15. 01:53Β·πŸ“‚ computer-science

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

  • https://www.youtube.com/watch?v=vorIqiLM7jc&t

'πŸ“‚ 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
'πŸ“‚ computer-science' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • μΊμ‹œ 정리 (Cache Summary)
  • ν•΄μ‹œ ν…Œμ΄λΈ”(Hash Table)
  • Multi Programming, Processing, Tasking, Threading
  • 가상 λ©”λͺ¨λ¦¬ (Virtual Memory)
cooper25
cooper25
  • cooper25
    dev cooper
    cooper25
  • 전체
    였늘
    μ–΄μ œ
    • λΆ„λ₯˜ 전체보기 (84)
      • πŸ“‚ backend (34)
        • spring (19)
        • architecture (10)
        • test (5)
      • πŸ“‚ computer-science (5)
      • πŸ“‚ programming-language (12)
        • java (12)
      • πŸ“‚ infra (9)
        • mysql (4)
        • redis (2)
        • message-queue (3)
      • πŸ“‚ cloud (2)
        • aws (2)
      • πŸ“‚ frontend (1)
        • react (0)
      • πŸ“‚ education & lecture (16)
        • 인프라 곡방 (11)
        • ν•­ν”Œ λ°±μ—”λ“œ 7κΈ° (5)
      • πŸ“‚ ai (1)
        • claude (1)
      • πŸ“‚ etc (2)
        • 회고 (1)
        • 컨퍼런슀 (1)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    가상 λ©΄μ ‘ μ‚¬λ‘€λ‘œ λ°°μš°λŠ” λŒ€κ·œλͺ¨ 섀계
    gof
    λ™μ‹œμ„±
    UUID
    AWS
    kafka
    spring camp 2025
    JPA
    ν•­ν•΄ν”ŒλŸ¬μŠ€
    nGrinder
    μŠ€ν”„λ§μΊ ν”„ ν›„κΈ°
    mysql
    Redisson
    데이터 쀑심 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 섀계
    인프라곡방
    회고
    spring
    spring AOP
    react
    spring-batch
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.6
cooper25
thread type & model
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”