Thread.md

졜근 νšŒμ‚¬ 싀무 면접을 λ³΄λ©΄μ„œ CSμ§ˆλ¬Έμ„ λ°›μ•˜λŠ”λ° μ œλŒ€λ‘œ λ‹΅λ³€ν•˜μ§€ λͺ»ν–ˆλ˜ μŠ€λ ˆλ“œμ— λŒ€ν•΄μ„œ κ³΅λΆ€ν–ˆλ‹€.

ν”„λ‘œμ„ΈμŠ€(process) vs μŠ€λ ˆλ“œ(thread)

ν”„λ‘œμ„ΈμŠ€

μ‚¬μš©μžκ°€ μž‘μ„±ν•œ ν”„λ‘œκ·Έλž¨μ΄ μš΄μ˜μ²΄μ œμ— μ˜ν•΄ λ©”λͺ¨λ¦¬ 곡간을 ν• λ‹Ήλ°›μ•„ μ‹€ν–‰ 쀑인 μƒνƒœ

  • ꡬ성

    • ν”„λ‘œκ·Έλž¨μ— μ‚¬μš©λ˜λŠ” λ°μ΄ν„°λ‚˜ λ©”λͺ¨λ¦¬

    • μŠ€λ ˆλ“œ

μŠ€λ ˆλ“œ

ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μ‹€μ œλ‘œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 주체

  • λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€μ—λŠ” ν•œ κ°œμ΄μƒμ˜ μŠ€λ ˆλ“œκ°€ λŒμ•„κ°€λ©° μž‘μ—…μ„ μˆ˜ν–‰ν•¨

  • λ©€ν‹° μŠ€λ ˆλ“œ ν”„λ‘œμ„ΈμŠ€: 두 개 μ΄μƒμ˜ μŠ€λ ˆλ“œλ₯Ό κ°€μ§€λŠ” ν”„λ‘œμ„ΈμŠ€

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

ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ λ‘˜ μ΄μƒμ˜ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 것

  • λ©€ν‹° ν”„λ‘œμ„ΈμŠ€: μ—¬λŸ¬κ°œμ˜ CPUλ₯Ό μ‚¬μš©ν•˜μ—¬ μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ™μ‹œμ— μˆ˜ν–‰ν•˜λŠ” 것

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

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

    • 각 ν”„λ‘œμ„ΈμŠ€κ°€ 독립적인 λ©”λͺ¨λ¦¬λ₯Ό 가지고 λ³„λ„λ‘œ μ‹€ν–‰

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

    • 각 μŠ€λ ˆλ“œκ°€ μžμ‹ μ΄ μ†ν•œ ν”„λ‘œμ„ΈμŠ€μ˜ λ©”λͺ¨λ¦¬λ₯Ό 곡유

  • νŠΉμ§•

    • μ‹œμŠ€ν…œ μžμ›μ˜ λ‚­λΉ„ 적음

      • 각 μŠ€λ ˆλ“œκ°€ μžμ‹ μ΄ μ†ν•œ ν”„λ‘œμ„ΈμŠ€μ— 할당받은 λ©”λͺ¨λ¦¬λ₯Ό κ³΅μœ ν•˜μ—¬ μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έ

    • μ‚¬μš©μžμ™€μ˜ 응닡성 쒋아짐

      • ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œκ°€ μž‘μ—…μ„ ν•  λ•Œ λ‹€λ₯Έ μŠ€λ ˆλ“œκ°€ λ³„λ„μ˜ μž‘μ—…μ„ ν•  수 있기 λ–„λ¬Έ

Context Switching

μ»΄ν“¨ν„°μ—μ„œ λ™μ‹œμ— μ²˜λ¦¬ν•  수 μžˆλŠ” μž‘μ—…μˆ˜λŠ” CPU의 μ½”μ–΄(core)수 인데, λ§Œμ•½ 이 μ½”μ–΄ μˆ˜λ³΄λ‹€ λ§Žμ€ μŠ€λ ˆλ“œκ°€ μ‹€ν–‰λ˜λ©΄ 각 μ½”μ–΄κ°€ 정해진 μ‹œκ°„ λ™μ•ˆ μ—¬λŸ¬ μž‘μ—…μ„ λ²ˆκ°ˆμ•„κ°€λ©° μˆ˜ν–‰ν•˜κ²Œ λœλ‹€. 이 λ•Œ 각 μŠ€λ ˆλ“œκ°€ μ„œλ‘œ κ΅μ²΄λ˜λŠ” μƒν™©μ—μ„œ Context Switching이 λ°œμƒν•œλ‹€.

Context Switchingμ΄λž€ ν˜„μž¬κΉŒμ§€μ˜ μž‘μ—… μƒνƒœλ‚˜ λ‹€μŒ μž‘μ—…μ— ν•„μš”ν•œ 각쒅 데이터λ₯Ό μ €μž₯ν•˜κ³  μ½μ–΄μ˜€λŠ” μž‘μ—…μ„ λ§ν•œλ‹€.

λ©€ν‹° μŠ€λ ˆλ“œ ν™˜κ²½μ—μ„œ Context Switching에 κ±Έλ¦¬λŠ” μ‹œκ°„μ΄ 컀질수둝 νš¨μœ¨μ€ μ €ν•˜λ˜κ³  λ§Žμ€ μ–‘μ˜ λ‹¨μˆœν•œ 계산은 μ‹±κΈ€ μŠ€λ ˆλ“œλ‘œ λ™μž‘ν•˜λŠ” 것이 νš¨μœ¨μ μ΄λ‹€.

μŠ€λ ˆλ“œ κ·Έλ£Ή(thread group)

μ„œλ‘œ 관련이 μžˆλŠ” μŠ€λ ˆλ“œλ₯Ό ν•˜λ‚˜μ˜ 그룹으둜 λ¬Άμ–΄ 닀루기 μœ„ν•œ μž₯치

데λͺ¬ μŠ€λ ˆλ“œ(daemon thread)

λ‹€λ₯Έ 일반 μŠ€λ ˆλ“œμ˜ μž‘μ—…μ„ λ•λŠ” 보쑰적인 역할을 ν•˜λŠ” μŠ€λ ˆλ“œ

일정 μ‹œκ°„λ§ˆλ‹€ μžλ™μœΌλ‘œ μˆ˜ν–‰λ˜λŠ” μ €μž₯ 및 ν™”λ©΄ κ°±μ‹  등에 이용

λŒ€λΆ€λΆ„ λ¬΄ν•œ 루프와 쑰건문을 μ΄μš©ν•˜μ—¬ μ‹€ν–‰ ν›„ λŒ€κΈ°ν•˜κ³  μžˆλ‹€κ°€ νŠΉμ • 쑰건이 만쑱되면 μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³  λ‹€μ‹œ λŒ€κΈ°ν•˜λ„λ‘ μž‘μ„±

가비지 컬렉터(garbage collector)

ν”„λ‘œκ·Έλž˜λ¨Έκ°€ λ™μ μœΌλ‘œ ν• λ‹Ήν•œ λ©”λͺ¨λ¦¬ 쀑 더 이상 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μ˜μ—­μ„ μžλ™μœΌλ‘œ μ°Ύμ•„λ‚΄μ–΄ ν•΄μ œν•΄ μ£ΌλŠ” 데λͺ¬ μŠ€λ ˆλ“œ

가비지 컬렉터가 λ™μž‘ν•˜λŠ” λ™μ•ˆμ—λŠ” ν”„λ‘œμ„Έμ„œκ°€ μΌμ‹œμ μœΌλ‘œ μ€‘μ§€λ˜κΈ° λ•Œλ¬Έμ— μ„±λŠ₯의 μ €ν•˜κ°€ λ°œμƒν•˜μ§€λ§Œ μ΅œκ·Όμ—λŠ” 가비지 μ»¬λ ‰ν„°μ˜ μ„±λŠ₯이 많이 ν–₯μƒλ˜μ–΄ μƒˆλ‘œ λ§Œλ“€μ–΄μ§€λŠ” λŒ€λΆ€λΆ„μ˜ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ 가비지 컬렉터λ₯Ό μ œκ³΅ν•˜κ³  μžˆλ‹€.

Last updated