λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Computer Science/Operating System

7 Thread in Software

by Dowon Kang 2023. 12. 28.

μ†Œν”„νŠΈμ›¨μ–΄ μΈ‘λ©΄μ—μ„œμ˜ μŠ€λ ˆλ“œ(Thread)λŠ” ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μ‹€ν–‰λ˜λŠ” λ…립적인 μ‹€ν–‰ νλ¦„을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 

각각의 μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ κ³΅μœ λœ μžμ›μ— λŒ€ν•œ λ…립적인 μ½”λ“œ μ‹€ν–‰ νλ¦„을 κ°€μ§€λ©°, μ΄λ“€μ€ μ„œλ‘œ λ‹€λ₯Έ μŠ€λ ˆλ“œ κ°„에 λ°μ΄ν„° λ° μžμ›μ„ κ³΅μœ ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” λ©€ν‹°μŠ€λ ˆλ”©(Multithreading)이라고 λΆˆλ¦¬λŠ” ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ˜ ν•΅μ‹¬μž…λ‹ˆλ‹€.

 

μŠ€λ ˆλ“œμ˜ μ£Όμš” κ΅¬μ„±μš”μ†Œ

  1. ν”„λ‘œκ·Έλž¨ μΉ΄μš΄ν„° (Program Counter)
    각 μŠ€λ ˆλ“œλŠ” μ‹€ν–‰ 쀑인 μ½”λ“œμ˜ μœ„μΉ˜λ₯Ό λ‚˜νƒ€λ‚΄λŠ” ν”„λ‘œκ·Έλž¨ μΉ΄μš΄ν„°λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” λ‹€μŒμ— μ‹€ν–‰ν•  λͺ…λ Ήμ–΄μ˜ μ£Όμ†Œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€.
  2. λ ˆμ§€μŠ€ν„° (Registers)
    μŠ€λ ˆλ“œλŠ” λ ˆμ§€μŠ€ν„° μ„ΈνŠΈλ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€. λ ˆμ§€μŠ€ν„°λŠ” 데이터λ₯Ό μΌμ‹œμ μœΌλ‘œ μ €μž₯ν•˜κ³  μ²˜λ¦¬ν•˜λŠ” 데 μ‚¬μš©λ˜λ©°, μŠ€λ ˆλ“œ κ°„ μ „ν™˜ μ‹œ ν˜„μž¬ μƒνƒœλ₯Ό μ €μž₯ν•˜κ³  λ³΅μ›ν•˜λŠ” 데에 μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€.
  3. μŠ€νƒ (Stack)
    각 μŠ€λ ˆλ“œλŠ” 자체 μŠ€νƒμ„ 가지고 μžˆμŠ΅λ‹ˆλ‹€. μŠ€νƒμ€ λ©”μ†Œλ“œ 호좜 및 둜컬 λ³€μˆ˜μ˜ μ €μž₯에 μ‚¬μš©λ˜λ©°, μŠ€λ ˆλ“œ κ°„μ˜ ν•¨μˆ˜ 호좜 및 볡귀에 ν•„μš”ν•œ 정보λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.
  4. μŠ€μΌ€μ€„λ§ 정보 (Scheduling Information)
    μš΄μ˜μ²΄μ œλŠ” μŠ€λ ˆλ“œλ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ μŠ€μΌ€μ€„λ§ 정보λ₯Ό μœ μ§€ν•©λ‹ˆλ‹€. 이 μ •λ³΄μ—λŠ” μŠ€λ ˆλ“œμ˜ μš°μ„ μˆœμœ„, μƒνƒœ (λŒ€κΈ°, μ‹€ν–‰, μ’…λ£Œ λ“±), μŠ€μΌ€μ€„λ§ μ •μ±…κ³Ό κ΄€λ ¨λœ 정보 등이 ν¬ν•¨λ©λ‹ˆλ‹€.
  5. μŠ€λ ˆλ“œ μ‹λ³„μž (Thread Identifier)
    각 μŠ€λ ˆλ“œλŠ” κ³ μœ ν•œ μ‹λ³„μžλ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€. 이 μ‹λ³„μžλ₯Ό 톡해 운영체제 및 ν”„λ‘œκ·Έλž¨μ—μ„œ νŠΉμ • μŠ€λ ˆλ“œλ₯Ό μ‹λ³„ν•˜κ³  μ œμ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  6. 곡유 μžμ› (Shared Resources)
    λ©€ν‹°μŠ€λ ˆλ”© ν™˜κ²½μ—μ„œλŠ” μŠ€λ ˆλ“œκ°€ μ†Œν”„νŠΈμ›¨μ–΄ μžμ›μ„ κ³΅μœ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” 주둜 데이터 ꡬ쑰, 파일, λ„€νŠΈμ›Œν¬ μ—°κ²° λ“±κ³Ό 같은 μžμ›μ„ ν¬ν•¨ν•©λ‹ˆλ‹€.
  7. μ“°λ ˆλ“œ 둜컬 μ €μž₯μ†Œ (Thread-Local Storage, TLS)
    일뢀 μŠ€λ ˆλ“œλŠ” μžμ‹ λ§Œμ˜ 둜컬 μ €μž₯μ†Œλ₯Ό κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 이 μ €μž₯μ†Œμ—λŠ” μŠ€λ ˆλ“œλ³„λ‘œ κ³ μœ ν•œ 데이터λ₯Ό μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  8. μƒνƒœ (State)
    μŠ€λ ˆλ“œλŠ” μ‹€ν–‰ 쀑인지, λŒ€κΈ° 쀑인지, μ’…λ£Œλœ μƒνƒœμΈμ§€ 등을 λ‚˜νƒ€λ‚΄λŠ” μƒνƒœ 정보λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€.
*λ¦¬λˆ…μŠ€ μš΄μ˜μ²΄μ œμ—μ„œλŠ” ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œλ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•Šκ³  μ‚¬μš©

 

 


 

λ©€ν‹° ν”„λ‘œμ„ΈμŠ€(Multiprocessing)와 λ©€ν‹° μŠ€λ ˆλ“œ(Multithreading)

λ©€ν‹° ν”„λ‘œμ„ΈμŠ€(Multiprocessing)와 λ©€ν‹° μŠ€λ ˆλ“œ(Multithreading)λŠ” λ³‘λ ¬ λ° λ™μ‹œμ„± ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•œ λ‘ κ°€μ§€ μ£Όμš” λ°©μ‹μž…λ‹ˆλ‹€. κ°κ°μ€ μžμ²΄μ μΈ νŠΉμ§•κ³Ό μž₯단점을 κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€.

1) λ©€ν‹° ν”„λ‘œμ„ΈμŠ€ (Multiprocessing)
λ©€ν‹° ν”„λ‘œμ„ΈμŠ€λŠ” μ—¬λŸ¬ 개의 독립적인 ν”„λ‘œμ„ΈμŠ€κ°€ μ„œλ‘œ λ‹€λ₯Έ λ©”λͺ¨λ¦¬ κ³΅κ°„μ—μ„œ μ‹€ν–‰λ˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. 각 ν”„λ‘œμ„ΈμŠ€λŠ” μš΄μ˜μ²΄μ œμ— μ˜ν•΄ λ…λ¦½μ μœΌλ‘œ κ΄€λ¦¬λ˜λ©°, 각각이 자체 μ£Όμ†Œ 곡간을 가지고 μ‹€ν–‰λ©λ‹ˆλ‹€.

  • μžμ› 곡유 및 톡신: μΌλ°˜μ μœΌλ‘œλŠ” ν”„λ‘œμ„ΈμŠ€κ°„μ˜ 정보 곡유λ₯Ό ν•˜μ§€ μ•Šμ§€λ§Œ μ—„λ°€νžˆ 따지면, λ©€ν‹° ν”„λ‘œμ„ΈμŠ€ κ°„μ—λŠ” λͺ…μ‹œμ μΈ IPC(Inter-Process Communication) λ©”μ»€λ‹ˆμ¦˜μ΄ μž‘λ™λ˜κΈ°λ„ ν•©λ‹ˆ. μ΄λŠ” ν”„λ‘œμ„ΈμŠ€ κ°„μ˜ 데이터 κ³΅μœ μ™€ 톡신을 μœ„ν•œ λ©”μ»€λ‹ˆμ¦˜μ„ λ§ν•©λ‹ˆλ‹€.
  • μ•ˆμ •μ„±: ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€κ°€ μΆ©λŒν•˜λ”λΌλ„ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ—λŠ” 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ•ˆμ •μ„±μ΄ λ†’μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ ν”„λ‘œμ„ΈμŠ€ κ°„ ν†΅μ‹ μ˜ λ³΅μž‘μ„±κ³Ό μ˜€λ²„ν—€λ“œκ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 병렬성: λ©€ν‹° ν”„λ‘œμ„ΈμŠ€λŠ” μ—¬λŸ¬ ν”„λ‘œμ„Έμ„œμ—μ„œ λ³‘λ ¬λ‘œ 싀행될 수 있기 λ•Œλ¬Έμ— 병렬성을 확보할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • κ΅¬ν˜„ λ‚œμ΄λ„: ν”„λ‘œμ„ΈμŠ€ κ°„μ˜ 톡신 및 동기화λ₯Ό 관리해야 ν•˜λ―€λ‘œ κ΅¬ν˜„μ΄ μƒλŒ€μ μœΌλ‘œ λ³΅μž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

2) λ©€ν‹° μŠ€λ ˆλ“œ (Multithreading)μ •μ˜: λ©€ν‹° μŠ€λ ˆλ“œλŠ” ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μ—¬λŸ¬ κ°œμ˜ μŠ€λ ˆλ“œκ°€ κ³΅μœ λœ λ©”λͺ¨λ¦¬ κ³΅κ°„μ—μ„œ λ™μž‘ν•˜λŠ” κ²ƒμ„ μ˜λ―Έν•©λ‹ˆλ‹€. μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€μ˜ μžμ›μ„ κ³΅μœ ν•˜λ©΄μ„œ λ³‘λ ¬λ‘œ μ‹€ν–‰λ  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

  • μžμ› κ³΅μœ  λ° ν†΅μ‹ : μŠ€λ ˆλ“œλŠ” κ°™μ€ ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μ‹€ν–‰λ˜λ―€λ‘œ λ³„λ„μ˜ IPC λ©”μ»€λ‹ˆμ¦˜μ΄ ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μŠ€λ ˆλ“œ κ°„μ˜ λ™μ‹œμ„± λ¬Έμ œμ— λŒ€ν•œ μ‹ κ²½μ¨μ•Ό ν•©λ‹ˆλ‹€.
  • μ•ˆμ •μ„±: ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œκ°€ μΆ©λŒν•˜λ©΄ ν•΄λ‹Ή ν”„λ‘œμ„ΈμŠ€ λ‚΄μ˜ λ‹€λ₯Έ μŠ€λ ˆλ“œμ—λ„ 영ν–₯을 λ―ΈμΉ  수 μžˆμŠ΅λ‹ˆλ‹€. μŠ€λ ˆλ“œ κ°„ 동기화에 μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • 병렬성: λ©€ν‹° μŠ€λ ˆλ“œλŠ” μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— μ‹€ν–‰λ˜λ―€λ‘œ 병렬성을 확보할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • κ΅¬ν˜„ λ‚œμ΄λ„: μŠ€λ ˆλ“œ κ°„μ˜ 동기화 및 경쟁 쑰건 등을 관리해야 ν•˜λ―€λ‘œ κ΅¬ν˜„μ΄ 일뢀 λ‚œν•΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3) 선택 κΈ°μ€€

λ©€ν‹° ν”„λ‘œμ„ΈμŠ€λŠ” μ•ˆμ •μ„±μ΄ λ†’κ³  독립성이 보μž₯λ˜μ§€λ§Œ, λ©”λͺ¨λ¦¬ 및 μžμ› μ†ŒλΉ„κ°€ 크고 ν”„λ‘œμ„ΈμŠ€ κ°„ 톡신이 λ³΅μž‘ν•©λ‹ˆλ‹€. λ©€ν‹° μŠ€λ ˆλ“œλŠ” μžμ› 효율적으둜 μ‚¬μš©ν•˜λ©° ν”„λ‘œμ„ΈμŠ€ κ°„ 톡신이 λ‹¨μˆœν•˜μ§€λ§Œ, 동기화와 κ΄€λ ¨λœ λ¬Έμ œμ— μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

 


Thread: An independent execution flow within a process that can access shared resources, serving as a small unit of execution.

Multiprocessing: A programming paradigm where multiple independent processes run in parallel, each in its own memory space, providing high stability at the cost of increased resource consumption.

Multithreading: A programming paradigm where multiple threads within a single process run concurrently in shared memory space, offering resource efficiency but requiring careful synchronization between threads.

 

λŒ“κΈ€