πŸ’» [OS] ν”„λ‘œμ„ΈμŠ€(Process)와 μŠ€λ ˆλ“œ(Thread)

πŸ’» [OS] ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œ

μ•ˆλ…•ν•˜μ„Έμš”. πŸ‘‹

μ˜€λŠ˜μ€ ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œμ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

ν”„λ‘œκ·Έλž¨(Program)μ΄λž€?

ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œμ— λŒ€ν•΄ μ•Œμ•„λ³΄λ €λ©΄ ν”„λ‘œκ·Έλž¨μ— λŒ€ν•΄ λ¨Όμ € μ•Œμ•„μ•Όν•œλ‹€.

  • ν”„λ‘œκ·Έλž¨μ΄λž€ μ»΄ν“¨ν„°μ—μ„œ 싀행될 λ•Œ νŠΉμ • μž‘μ—…(specific task)을 μˆ˜ν–‰ν•˜λŠ” 일련의 λͺ…λ Ήμ–΄λ“€μ˜ λͺ¨μŒ(집합체)이닀.
  • μˆ˜λ™μ μΈ 쑴재

    즉, μ–΄λ– ν•œ μž‘μ—…λ“€μ„ μˆ˜ν–‰μ‹œν‚€κΈ° μœ„ν•œ λͺ…λ Ήμ–΄(μ½”λ“œ)의 λͺ¨μŒμ΄λ‹€.

ν”„λ‘œμ„ΈμŠ€(Process)λž€?

ν”„λ‘œκ·Έλž¨μ€ 단지 μ–΄λ– ν•œ μž‘μ—…λ“€μ„ μˆ˜ν–‰μ‹œν‚€κΈ° μœ„ν•œ λͺ…λ Ήμ–΄(μ½”λ“œ)의 λͺ¨μŒμ΄λ―€λ‘œ μ‹€μ œλ‘œ μž‘μ—…λ“€μ„ μˆ˜ν–‰μ‹œν‚€λ €λ©΄ 이 ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰μ‹œμΌœμ•Ό ν•œλ‹€.

  • ν”„λ‘œμ„ΈμŠ€(process)λŠ” μ»΄ν“¨ν„°μ—μ„œ μ—°μ†μ μœΌλ‘œ μ‹€ν–‰λ˜κ³  μžˆλŠ” 컴퓨터 ν”„λ‘œκ·Έλž¨μ„ λ§ν•œλ‹€.
  • λ©”λͺ¨λ¦¬μ— μ˜¬λΌμ™€ μ‹€ν–‰λ˜κ³  μžˆλŠ” ν”„λ‘œκ·Έλž¨μ˜ μΈμŠ€ν„΄μŠ€(독립적인 개체)
  • μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° μ‹œμŠ€ν…œ μžμ›μ„ ν• λ‹Ήλ°›λŠ” μž‘μ—…μ˜ λ‹¨μœ„
  • λŠ₯동적인 쑴재

ν”„λ‘œμ„ΈμŠ€ λ©”λͺ¨λ¦¬ ꡬ쑰

μ‹€μ œλ‘œ μžμ›μ„ 뢀여받은 λ©”λͺ¨λ¦¬ μƒμ˜ ν”„λ‘œμ„ΈμŠ€ κ΅¬μ‘°λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

process

Code
  • λ©”λͺ¨λ¦¬μ˜ μ½”λ“œ(code) μ˜μ—­μ€ μ‹€ν–‰ν•  ν”„λ‘œκ·Έλž¨μ˜ μ½”λ“œκ°€ μ €μž₯λ˜λŠ” μ˜μ—­μœΌλ‘œ ν…μŠ€νŠΈ(code) μ˜μ—­μ΄λΌκ³ λ„ λΆ€λ₯Έλ‹€.
  • CPUλŠ” μ½”λ“œ μ˜μ—­μ— μ €μž₯된 λͺ…λ Ήμ–΄λ₯Ό ν•˜λ‚˜μ”© κ°€μ Έκ°€μ„œ μ²˜λ¦¬ν•˜κ²Œ λ©λ‹ˆλ‹€.
Data
  • λ©”λͺ¨λ¦¬μ˜ 데이터(data) μ˜μ—­μ€ ν”„λ‘œκ·Έλž¨μ˜ μ „μ—­ λ³€μˆ˜μ™€ 정적(static) λ³€μˆ˜κ°€ μ €μž₯λ˜λŠ” μ˜μ—­μ΄λ‹€.
  • 데이터 μ˜μ—­μ€ ν”„λ‘œκ·Έλž¨μ˜ μ‹œμž‘κ³Ό ν•¨κ»˜ ν• λ‹Ήλ˜λ©°, ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ˜λ©΄ μ†Œλ©Έν•œλ‹€.
Stack
  • λ©”λͺ¨λ¦¬μ˜ μŠ€νƒ(stack) μ˜μ—­μ€ ν•¨μˆ˜μ˜ 호좜과 κ΄€κ³„λ˜λŠ” 지역 λ³€μˆ˜μ™€ λ§€κ°œλ³€μˆ˜κ°€ μ €μž₯λ˜λŠ” μ˜μ—­μ΄λ‹€.
  • μŠ€νƒ μ˜μ—­μ€ ν•¨μˆ˜μ˜ 호좜과 ν•¨κ»˜ ν• λ‹Ήλ˜λ©°, ν•¨μˆ˜μ˜ 호좜이 μ™„λ£Œλ˜λ©΄ μ†Œλ©Έν•œλ‹€.
Heap
  • ν”„λ‘œμ„ΈμŠ€ μ‹€ν–‰ 쀑에 λ™μ μœΌλ‘œ ν• λ‹Ήλ˜λŠ” λ©”λͺ¨λ¦¬μ΄λ‹€.
  • new μ—°μ‚° λ“±μœΌλ‘œ λ™μ μœΌλ‘œ ν• λ‹Ή λœλ‹€.

νŠΉμ§•

  • ν”„λ‘œμ„ΈμŠ€λŠ” 각각 λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­(Code, Data, Stack, Heap의 ꡬ쑰)을 ν• λ‹Ήλ°›λŠ”λ‹€.
  • 기본적으둜 ν”„λ‘œμ„ΈμŠ€λ‹Ή μ΅œμ†Œ 1개의 μŠ€λ ˆλ“œ(메인 μŠ€λ ˆλ“œ)λ₯Ό 가지고 μžˆλ‹€.
  • 각 ν”„λ‘œμ„ΈμŠ€λŠ” λ³„λ„μ˜ μ£Όμ†Œ κ³΅κ°„μ—μ„œ μ‹€ν–‰λ˜λ©°, ν•œ ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ λ³€μˆ˜λ‚˜ μžλ£Œκ΅¬μ‘°μ— μ ‘κ·Όν•  수 μ—†λ‹€.
  • ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ μžμ›μ— μ ‘κ·Όν•˜λ €λ©΄ ν”„λ‘œμ„ΈμŠ€ κ°„μ˜ 톡신(IPC, inter-process communication)을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
    • ex) νŒŒμ΄ν”„, 파일, μ†ŒμΌ“ 등을 μ΄μš©ν•œ 톡신 방법 이용

μŠ€λ ˆλ“œ(thread)λž€?

  • ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μ‹€ν–‰λ˜λŠ” μ—¬λŸ¬ νλ¦„μ˜ λ‹¨μœ„
  • ν”„λ‘œμ„ΈμŠ€μ˜ νŠΉμ •ν•œ μˆ˜ν–‰ 경둜
  • ν”„λ‘œμ„ΈμŠ€κ°€ 할당받은 μžμ›μ„ μ΄μš©ν•˜λŠ” μ‹€ν–‰μ˜ λ‹¨μœ„

μŠ€λ ˆλ“œ νŠΉμ§•

process

  • μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ 각 Stack μ˜μ—­λ§Œμ„ λ”°λ‘œ ν• λ‹Ήλ°›κ³  Code, Data, Heap μ˜μ—­μ€ κ³΅μœ ν•œλ‹€.
  • μŠ€λ ˆλ“œλŠ” ν•œ ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ λ™μž‘λ˜λŠ” μ—¬λŸ¬ μ‹€ν–‰μ˜ νλ¦„μœΌλ‘œ, ν”„λ‘œμ„ΈμŠ€ λ‚΄μ˜ μ£Όμ†Œ κ³΅κ°„μ΄λ‚˜ μžμ›λ“€(νž™ 곡간 λ“±)을 같은 ν”„λ‘œμ„ΈμŠ€ 내에 μŠ€λ ˆλ“œλΌλ¦¬ κ³΅μœ ν•˜λ©΄μ„œ μ‹€ν–‰λœλ‹€.
  • λ™μΌν•œ ν”„λ‘œμ„ΈμŠ€ μ•ˆμ— μžˆλŠ” μ—¬λŸ¬ μŠ€λ ˆλ“œλ“€μ€ 같은 νž™ 곡간을 κ³΅μœ ν•œλ‹€. λ°˜λ©΄μ— ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ λ©”λͺ¨λ¦¬μ— 직접 μ ‘κ·Όν•  수 μ—†λ‹€.
  • 각각의 μŠ€λ ˆλ“œλŠ” λ³„λ„μ˜ λ ˆμ§€μŠ€ν„°μ™€ μŠ€νƒμ„ κ°–κ³  μžˆμ§€λ§Œ, νž™ λ©”λͺ¨λ¦¬λŠ” μ„œλ‘œ 읽고 μ“Έ 수 μžˆλ‹€.
  • ν•œ μŠ€λ ˆλ“œκ°€ ν”„λ‘œμ„ΈμŠ€ μžμ›μ„ λ³€κ²½ν•˜λ©΄, λ‹€λ₯Έ 이웃 μŠ€λ ˆλ“œ(sibling thread)도 κ·Έ λ³€κ²½ κ²°κ³Όλ₯Ό μ¦‰μ‹œ λ³Ό 수 μžˆλ‹€.
  • 기본적으둜 ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€κ°€ μƒμ„±λ˜λ©΄ ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œκ°€ 같이 μƒμ„±λœλ‹€.

λ©€ν‹° ν”„λ‘œμ„ΈμŠ€μ™€ λ©€ν‹° μŠ€λ ˆλ“œ

Context Switching(λ¬Έλ§₯ κ΅ν™˜) μ΄λž€?

  • CPUμ—μ„œ μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€λ₯Ό λŒμ•„κ°€λ©΄μ„œ μž‘μ—…μ„ μ²˜λ¦¬ν•˜λŠ” 데 이 과정을 Context Switching이라 ν•œλ‹€.
  • ꡬ체적으둜, λ™μž‘ 쀑인 ν”„λ‘œμ„ΈμŠ€κ°€ λŒ€κΈ°λ₯Ό ν•˜λ©΄μ„œ ν•΄λ‹Ή ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœ(Context)λ₯Ό λ³΄κ΄€ν•˜κ³ , λŒ€κΈ°ν•˜κ³  있던 λ‹€μŒ μˆœμ„œμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ λ™μž‘ν•˜λ©΄μ„œ 이전에 λ³΄κ΄€ν–ˆλ˜ ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœλ₯Ό λ³΅κ΅¬ν•˜λŠ” μž‘μ—…μ„ λ§ν•œλ‹€.

λ©€ν‹° ν”„λ‘œμ„ΈμŠ€

λ©€ν‹° ν”„λ‘œμ„Έμ‹±μ΄λž€

  • ν•˜λ‚˜μ˜ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ μ—¬λŸ¬ 개의 ν”„λ‘œμ„ΈμŠ€λ‘œ κ΅¬μ„±ν•˜μ—¬ 각 ν”„λ‘œμ„ΈμŠ€κ°€ ν•˜λ‚˜μ˜ μž‘μ—…(νƒœμŠ€ν¬)을 μ²˜λ¦¬ν•˜λ„λ‘ ν•˜λŠ” 것이닀.

μž₯점

  • μ•ˆμ •μ„±μ΄ μ’‹λ‹€. μ—¬λŸ¬κ°œμ˜ μžμ‹ ν”„λ‘œμ„ΈμŠ€ 쀑 ν•˜λ‚˜μ— λ¬Έμ œκ°€ λ°œμƒν•΄λ„, λ‹€λ₯Έ μžμ‹ ν”„λ‘œμ„ΈμŠ€μ— 영ν–₯이 ν™•μ‚°λ˜μ§€ μ•ŠλŠ”λ‹€.
  • κ΅¬ν˜„μ΄ 비ꡐ적 κ°„λ‹¨ν•˜λ‹€. 단점
  • λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ΄ λ§Žλ‹€.
    • κ³΅μœ ν•˜λŠ” λ©”λͺ¨λ¦¬κ°€ 없이 ν”„λ‘œμ„ΈμŠ€ 각각 λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήλ°›κΈ° λ•Œλ¬Έμ΄λ‹€.
  • Context Switchingμ—μ„œμ˜ μ˜€λ²„ν—€λ“œ
    • Context Switching κ³Όμ •μ—μ„œ 캐쉬 λ©”λͺ¨λ¦¬ μ΄ˆκΈ°ν™” λ“± 무거운 μž‘μ—…μ΄ μ§„ν–‰λ˜κ³  λ§Žμ€ μ‹œκ°„μ΄ μ†Œλͺ¨λ˜λŠ” λ“±μ˜ μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•˜κ²Œ λœλ‹€.
    • ν”„λ‘œμ„ΈμŠ€λŠ” 각각의 λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ ν• λ‹Ήλ°›μ•˜κΈ° λ•Œλ¬Έμ— ν”„λ‘œμ„ΈμŠ€ μ‚¬μ΄μ—μ„œ κ³΅μœ ν•˜λŠ” λ©”λͺ¨λ¦¬κ°€ μ—†μ–΄, Context Switchingκ°€ λ°œμƒν•˜λ©΄ 캐쉬에 μžˆλŠ” λͺ¨λ“  데이터λ₯Ό λͺ¨λ‘ λ¦¬μ…‹ν•˜κ³  λ‹€μ‹œ 캐쉬 정보λ₯Ό λΆˆλŸ¬μ™€μ•Ό ν•œλ‹€.
  • ν”„λ‘œμ„ΈμŠ€ μ‚¬μ΄μ˜ μ–΄λ ΅κ³  λ³΅μž‘ν•œ 톡신 기법(IPC)
    • ν”„λ‘œμ„ΈμŠ€λŠ” 각각의 λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ ν• λ‹Ήλ°›μ•˜κΈ° λ•Œλ¬Έμ— ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μ— μ†ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λ“€ μ‚¬μ΄μ˜ λ³€μˆ˜λ₯Ό κ³΅μœ ν•  수 μ—†λ‹€.
    • λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ— μ ‘κ·Όν•˜κΈ° μœ„ν•΄ IPCλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

λ©€ν‹° μŠ€λ ˆλ“œ

λ©€ν‹° μŠ€λ ˆλ”©μ΄λž€

  • ν•˜λ‚˜μ˜ μ‘μš©ν”„λ‘œκ·Έλž¨μ„ μ—¬λŸ¬ 개의 μŠ€λ ˆλ“œλ‘œ κ΅¬μ„±ν•˜κ³  각 μŠ€λ ˆλ“œλ‘œ ν•˜μ—¬κΈˆ ν•˜λ‚˜μ˜ μž‘μ—…μ„ μ²˜λ¦¬ν•˜λ„λ‘ ν•˜λŠ” 것이닀.
  • μœˆλ„μš°, λ¦¬λˆ…μŠ€ λ“± λ§Žμ€ μš΄μ˜μ²΄μ œλ“€μ΄ λ©€ν‹° ν”„λ‘œμ„Έμ‹±μ„ μ§€μ›ν•˜κ³  μžˆμ§€λ§Œ λ©€ν‹° μŠ€λ ˆλ”©μ„ 기본으둜 ν•˜κ³  μžˆλ‹€.
  • μ›Ή μ„œλ²„λŠ” λŒ€ν‘œμ μΈ λ©€ν‹° μŠ€λ ˆλ“œ μ‘μš© ν”„λ‘œκ·Έλž¨μ΄λ‹€.

μž₯점

  • μ‹œμŠ€ν…œ μžμ› μ†Œλͺ¨ κ°μ†Œ (μžμ›μ˜ νš¨μœ¨μ„± μ¦λŒ€)
    • ν”„λ‘œμ„ΈμŠ€λ₯Ό μƒμ„±ν•˜μ—¬ μžμ›μ„ ν• λ‹Ήν•˜λŠ” μ‹œμŠ€ν…œ 콜이 쀄어듀어 μžμ›μ„ 효율적으둜 관리할 수 μžˆλ‹€.
  • μžμ› 곡유 용이
  • μ‹œμŠ€ν…œ μ²˜λ¦¬λŸ‰ 증가 (처리 λΉ„μš© κ°μ†Œ)
    • μŠ€λ ˆλ“œ κ°„ 데이터λ₯Ό μ£Όκ³  λ°›λŠ” 것이 간단해지고 μ‹œμŠ€ν…œ μžμ› μ†Œλͺ¨κ°€ μ€„μ–΄λ“€κ²Œ λœλ‹€.
    • μŠ€λ ˆλ“œ μ‚¬μ΄μ˜ μž‘μ—…λŸ‰μ΄ μž‘μ•„ Context Switching이 λΉ λ₯΄λ‹€.
  • κ°„λ‹¨ν•œ 톡신 λ°©λ²•μœΌλ‘œ μΈν•œ ν”„λ‘œκ·Έλž¨ 응닡 μ‹œκ°„ 단좕
    • μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€ λ‚΄μ˜ Stack μ˜μ—­μ„ μ œμ™Έν•œ λͺ¨λ“  λ©”λͺ¨λ¦¬λ₯Ό κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ— ν†΅μ‹ μ˜ 뢀담이 적닀.

단점

  • 주의 κΉŠμ€ 섀계가 ν•„μš”ν•˜λ‹€.
  • κ΅¬ν˜„ 및 ν…ŒμŠ€νŠΈ, 디버깅이 μ–΄λ ΅λ‹€.
  • λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ—μ„œ μŠ€λ ˆλ“œλ₯Ό μ œμ–΄ν•  수 μ—†λ‹€. (즉, ν”„λ‘œμ„ΈμŠ€ λ°–μ—μ„œ μŠ€λ ˆλ“œ 각각을 μ œμ–΄ν•  수 μ—†λ‹€.)
  • μžμ› 곡유둜 μΈν•œ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€. <b<(동기화 문제)</b>
  • μžμ‹ μŠ€λ ˆλ“œ 쀑 ν•˜λ‚˜μ— λ¬Έμ œκ°€ μƒκΈ΄κ²½μš° 전체 ν”„λ‘œμ„ΈμŠ€μ— 영ν–₯을 쀄 수 μžˆλ‹€.

μ–΄λ–€ 상황에 λ©€ν‹°ν”„λ‘œμ„ΈμŠ€, λ©€ν‹°μŠ€λ ˆλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ 쒋은 κ²ƒμΌκΉŒ?

λ©€ν‹°μŠ€λ ˆλ“œ

  • 일반적으둜 λ©€ν‹°μŠ€λ ˆλ“œλ₯Ό 많이 μ‚¬μš©ν•œλ‹€. (μžμ›μ„ 효율적으둜 μ‚¬μš©ν•˜κ³  μ„±λŠ₯이 μ’‹κΈ° λ•Œλ¬Έ)
  • μŠ€λ ˆλ“œλ§ˆλ‹€ μ‘΄μž¬ν•˜λŠ” Stackμ˜μ—­μ„ μ œμ™Έν•œ λ‚˜λ¨Έμ§€ λ©”λͺ¨λ¦¬λŠ” κ³΅μœ ν•˜λ―€λ‘œ μžμ›μ„ 효율적으둜 μ‚¬μš©ν•  수 μžˆλ‹€.
  • λ©”λͺ¨λ¦¬λ₯Ό κ³΅μœ ν•˜λ―€λ‘œ 처리 λΉ„μš© λ˜ν•œ κ°μ†Œν•˜κ³  응닡 μ‹œκ°„ λ˜ν•œ λΉ λ₯΄λ‹€. Context Switching μ‹œκ°„λ„ μƒλ‹Ήνžˆ λΉ λ₯΄λ‹€.

  • ν•˜μ§€λ§Œ, 였히렀 λ©”λͺ¨λ¦¬ 곡유둜 μΈν•œ μž„κ³„κ΅¬μ—­ 문제 λ•Œλ¬Έμ— 동기화 문제λ₯Ό μ‹ κ²½μ¨μ•Όν•œλ‹€.
  • λ˜ν•œ ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œμ— λ¬Έμ œκ°€ 생긴닀면 λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€μ— λ¬Έμ œκ°€ 생긴닀.

λ©€ν‹°ν”„λ‘œμ„ΈμŠ€

  • λ©€ν‹°μŠ€λ ˆλ“œκ°€ λ©”λͺ¨λ¦¬λ₯Ό 효율적으둜 μ‚¬μš©ν•˜κ³  μ„±λŠ₯이 λΉ λ₯΄μ§€λ§Œ μ•ˆμ •μ„±μ΄ λΆ€μ‘±ν•˜λ‹€.
  • μ’€ 더 μ•ˆμ •μ μΈ μ²˜λ¦¬κ°€ ν•„μš”ν•  λ•Œ μ‚¬μš©λœλ‹€.
  • 과거의 λΈŒλΌμš°μ €λ“€μ€ 탭을 λ©€ν‹°μŠ€λ ˆλ“œ λ°©μ‹μœΌλ‘œ μ§€μ›ν•˜μ—¬ ν•˜λ‚˜μ˜ 탭에 λ¬Έμ œκ°€ 생기면 λΈŒλΌμš°μ €μ˜ 탭이 λͺ¨λ‘ μ’…λ£Œλ˜μ–΄ 정보가 날라가곀 ν–ˆλ‹€.
  • μ΅œμ‹ μ˜ λΈŒλΌμš°μ €λ“€μ€ (ex 크둬) 탭에 λ©€ν‹°ν”„λ‘œμ„ΈμŠ€ λ°©μ‹μœΌλ‘œ 지원해 ν•˜λ‚˜μ˜ 탭이 λ¬Έμ œκ°€ 생기더라도 λ‹€λ₯Έ 탭듀에 λ¬Έμ œκ°€ 없도둝 ν•˜μ˜€λ‹€.

끝

ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œμ— λŒ€ν•΄ μ•Œμ•„λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

Reference

https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

https://charlezz.medium.com/process%EC%99%80-thread-%EC%9D%B4%EC%95%BC%EA%B8%B0-5b96d0d43e37

Written on June 28, 2021