12μ›” 2일 TIL

μž„λ€λ€Β·2022λ…„ 12μ›” 2일

πŸ’‘ μŠ€λ ˆλ“œ

  • λͺ…λ Ήμ–΄κ°€ CPUλ₯Ό ν†΅ν•΄μ„œ μˆ˜ν–‰λ˜λŠ” 객체의 λ‹¨μœ„μž„
    • ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ μ•ˆμ—λŠ” λ°˜λ“œμ‹œ 1개 μ΄μƒμ˜ μŠ€λ ˆλ“œκ°€ μ‘΄μž¬ν•˜κ³  이런 μŠ€λ ˆλ“œλŠ” 같은 ν”„λ‘œμ„ΈμŠ€μ— μžˆλŠ” μžμ›κ³Ό μƒνƒœλ₯Ό κ³΅μœ ν•¨
  • 같은 ν”„λ‘œμ„ΈμŠ€ 내에 μžˆλŠ” μŠ€λ ˆλ“œλŠ” 같은 μ£Όμ†Œκ³΅κ°„μ— μ‘΄μž¬ν•˜κ²Œλ˜κ³  λ™μΌν•œ 데이터에 접근이 κ°€λŠ₯함
    • ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œκ°€ μˆ˜μ •ν•œ λ©”λͺ¨λ¦¬λŠ” 같은 λ©”λͺ¨λ¦¬λ₯Ό μ°Έμ‘°ν•˜λŠ” μŠ€λ ˆλ“œμ— 영ν–₯을 미치게됨

μŠ€λ ˆλ“œλŠ” μ™œ ν•„μš”ν•΄?

  • μŠ€λ ˆλ“œλŠ” ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ μ•ˆμ—μ„œ μ—¬λŸ¬κ°œμ˜ 루틴을 λ™μ‹œμ— μˆ˜ν–‰ν•΄μ„œ μˆ˜ν–‰λŠ₯λ ₯을 ν–₯μƒν•˜λ €κ³  ν• λ•Œ μ‚¬μš©ν•˜κ²Œ λ˜λŠ”λ° 독립적 μˆ˜ν–‰μœΌλ‘œ μ²˜λ¦¬ν•˜λ €κ³  ν•  λ•Œ μ‚¬μš©λ¨
    • 즉 μ—¬λŸ¬κ°œ μž‘μ—…λ‹¨μœ„λ‘œ κ΅¬μ„±λœ ν”„λ‘œκ·Έλž¨μ—μ„œ μš”μ²­μ„ λ™μ‹œμ— μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ¨

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

  • 가상 CPU: 인터프리터, μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ λ‚΄λΆ€μ μœΌλ‘œ μ²˜λ¦¬λ˜λŠ” κ°€μƒμ½”λ“œ
  • μˆ˜ν–‰μ½”λ“œ : Thread Class에 κ΅¬ν˜„λ˜μ–΄μžˆλŠ” run() Methodμž„
  • μ²˜λ¦¬λ°μ΄ν„°: Threadμ—μ„œ μ²˜λ¦¬λ˜λŠ” 데이터

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

  • ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μ‹€ν–‰λ˜λŠ” νλ¦„μ˜ λ‹¨μœ„
  • 각 μŠ€λ ˆλ“œλ§ˆλ‹€ call stack이 μ‘΄μž¬ν•˜κ³  λ‚˜λ¨Έμ§€ Code, Data, Heap μ˜μ—­μ€ μŠ€λ ˆλ“œλΌλ¦¬ κ³΅μœ ν•¨
    • ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ λ©”λͺ¨λ¦¬μ— 직접 μ ‘κ·Ό ν•  수 μ—†μŒ
  • μŠ€λ ˆλ“œλŠ” λ‹€λ₯Έ μŠ€λ ˆλ“œμ™€ 독립적인 λ™μž‘μ„ν•¨
    • λ‘κ°œμ΄μƒ μ‹€ν–‰λ˜λ©΄ μŠ€λ ˆλ“œμ˜ μ‹€ν–‰κ³Ό μ’…λ£Œμˆœμ„œλŠ” 예츑이 λΆˆκ°€ν•¨

πŸ’‘ μ‹±κΈ€ μŠ€λ ˆλ“œμ™€ λ©€ν‹° μŠ€λ ˆλ“œ

μ‹±κΈ€ μŠ€λ ˆλ“œ

  • ν”„λ‘œμ„ΈμŠ€κ°€ 단일 μŠ€λ ˆλ“œλ‘œ λ™μž‘ν•˜λŠ” λ°©μ‹μž„
    • 일련의 처리λ₯Ό 단일 μŠ€λ ˆλ“œλ§ŒμœΌλ‘œ 직렬 μ²˜λ¦¬ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° λ°©λ²•μž„
    • ν•˜λ‚˜μ˜ λ ˆμ§€μŠ€ν„°, μŠ€νƒμœΌλ‘œ ν‘œν˜„ν•¨ ( μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ λŒ€ν‘œμ μΈ μ‹±κΈ€μŠ€λ ˆλ“œ μ–Έμ–΄μž„ )

μ‹±κΈ€μŠ€λ ˆλ“œμ˜ μž₯점

  • μžμ› 접근에 λŒ€ν•œ 동기화λ₯Ό μ‹ κ²½μ“°μ§€ μ•Šμ•„λ„ 됨
  • μžμ› 접근에 λŒ€ν•œ 동기화λ₯Ό μ‹ κ²½μ“°μ§€ μ•Šμ•„λ„ 되기 λ•Œλ¬Έμ— λ¬Έλ§₯κ΅ν™˜ μž‘μ—…λ˜ν•œ μš”κ΅¬ν•˜μ§€ μ•ŠμŒ
    • μ—¬λŸ¬κ°œμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ ν•˜λ‚˜μ˜ ν”„λ‘œμ„Έμ„œλ₯Ό κ³΅μœ ν•  λ•Œ λ°œμƒν•˜λŠ” μž‘μ—…μœΌλ‘œ λ§Žμ€ λΉ„μš©μ„ ν•„μš”λ‘œν•¨
  • ν”„λ‘œκ·Έλž˜λ° λ‚œμ΄λ„κ°€ 쉽고 CPU λ©”λͺ¨λ¦¬λ₯Ό 적게 μ‚¬μš©ν•¨

μ‹±κΈ€ μŠ€λ ˆλ“œμ˜ 단점

  • μ—¬λŸ¬κ°œμ˜ CPUλ₯Ό ν™œμš©ν•˜μ§€ λͺ»ν•¨
    • ν•˜λ‚˜μ˜ 물리적 μ½”μ–΄λ§Œ μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— μ½”μ–΄λ¨Έμ‹ μ—μ„œ CPU μ‚¬μš©μ„ μ΅œμ ν™” ν•  수 μ—†μŒ
    • μ΅œμ ν™”λ₯Ό ν•˜κΈ° μœ„ν•΄μ„  Cluster λͺ¨λ“ˆμ„ μ΄μš©ν•΄μ„œ μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‚¬μš© ν•  μˆ˜λŠ” μžˆμ§€λ§Œ ν”„λ‘œμ„ΈμŠ€ 끼리의 μžμ› κ³΅μœ λŠ” 어렀움
    • Redis와같은 λΆ€κ°€ 인프라가 ν•„μš”ν•¨
  • μ—°μ‚°λŸ‰μ΄ λ§Žμ€ μž‘μ—…μ„ ν•˜λŠ” κ²½μš°μ— κ·Έ μž‘μ—…μ΄ μ™„λ£Œλ˜μ•Ό λ‹€λ₯Έμž‘업을 μˆ˜ν–‰ ν•  수 있음
  • μ‹±κΈ€μŠ€λ ˆλ“œ λͺ¨λΈμ€ μ—λŸ¬μ²˜λ¦¬λ₯Ό λͺ»ν•˜λŠ”κ²½μš°μ— λ©ˆμΆ°λ²„λ¦Ό
    • λ©€ν‹° μŠ€λ ˆλ“œ λͺ¨λΈμ€ μ—λŸ¬ λ°œμƒμ‹œμ— μƒˆλ‘œμš΄ μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•΄μ„œ 극볡이 κ°€λŠ₯

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

  • 일반적으둜 ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λŠ” ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œλ₯Ό κ°€μ§€κ³  μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ”λ°
  • λ©€ν‹°μŠ€λ ˆλ“œλŠ” λ‘˜ μ΄μƒμ˜ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ”κ±Έ μ˜λ―Έν•¨
    • λ©€ν‹° ν”„λ‘œμ„ΈμŠ€λŠ” μ—¬λŸ¬κ°œμ˜ CPUλ₯Ό μ‚¬μš©ν•΄μ„œ μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ™μ‹œμ— μˆ˜ν–‰ν•˜λŠ”κ±Έ μ˜λ―Έν•¨
  • μ‹œμŠ€ν…œ μžμ› ν™œμš© κ·ΉλŒ€ν™” 및 μ²˜λ¦¬λŸ‰ μ¦λŒ€ν•  수 μžˆμ–΄ 단일 ν”„λ‘œμ„ΈμŠ€ μ‹œμŠ€ν…œμ˜ νš¨μœ¨μ„±μ„ 높일 수 있음

λ©€ν‹° μŠ€λ ˆλ”©μ˜ μž₯점

  • μž‘μ—…μ„ λΆ„λ¦¬ν•΄μ„œ μˆ˜ν–‰ν•˜κΈ° 떄문에 μ‹€μ‹œκ°„μœΌλ‘œ μ‚¬μš©μžμ—κ²Œ 응닡이 κ°€λŠ₯함
  • ν•œ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ—¬λŸ¬ ν”„λ‘œμ„Έμ„œμ—μ„œ μˆ˜ν–‰ν• μˆ˜ 있음으둜 훨신 효율적인

λ©€ν‹° μŠ€λ ˆλ”©μ˜ 문제점

  • μ£Όμ˜κΉŠμ€ 섀계가 ν•„μš”ν•˜κ³  디버깅이 κΉŒλ‹€λ‘œμ›€
  • ν”„λ‘œμ„ΈμŠ€ λ°–μ—μ„œ μŠ€λ ˆλ“œλ₯Ό 각각을 μ œμ–΄ν• μˆ˜κ°€ μ—†μŒ
  • λ©€ν‹° μŠ€λ ˆλ“œμ˜ 경우 μžμ› 곡유의 λ¬Έμ œκ°€ λ°œμƒν•¨
    • ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œμ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ ν”„λ‘œμ„ΈμŠ€ 전체가 영ν–₯을 λ°›μŒ
  • λ¬Έλ§₯ κ΅ν™˜ μž‘μ—…μ„ μš”κ΅¬ν•¨
    • CPUμ—μ„œ μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€λ₯Ό λŒμ•„κ°€λ©΄μ„œ μž‘μ—…μ„ μ²˜λ¦¬ν•˜λŠ”λ° 이 과정을 λ¬Έλ§₯κ΅ν™˜μ΄λΌκ³  함

πŸ’‘ λ™μ‹œμ„±κ³Ό λ³‘λ ¬μ„±μ˜ 차이

  • λ™μ‹œμ— 돌릴 수 μžˆλŠ” μŠ€λ ˆλ“œ μˆ˜λŠ” 컴퓨터에 μžˆλŠ” μ½”μ–΄μ˜ 개수둜 μ œν•œλ¨
    • μš΄μ˜μ²΄μ œλŠ” 각 μŠ€λ ˆλ“œλ₯Ό μ‹œκ°„μ— 따라 λΆ„ν• ν•΄μ„œ μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ 일정 μ‹œκ°„ λŒμ•„κ°€λ©΄μ„œ μ‹€ν–‰λ˜κ²Œν•¨
    • 이런 방식을 μ‹œλΆ„ν• μ΄λΌκ³ ν•¨
profile
μ‘μ• πŸ£ μ˜ˆλΉ„ 개발자 μž…λ‹ˆλ‹€.

0개의 λŒ“κΈ€