πŸŒŸΒ μŠ€λ ˆλ“œ κΈ°λ³Έ κ°œλ…

ν•­λͺ© μ •μ˜ λΉ„κ³ 
ν”„λ‘œμ„ΈμŠ€ - μ»΄ν“¨ν„°μ—μ„œ νŠΉμ •ν•œ μ–‘μ˜ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ή λ°›μ•„ μ‹€ν–‰λ˜κ³  μžˆλŠ” ν”„λ‘œκ·Έλž¨
μŠ€λ ˆλ“œ ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μ§„ν–‰λ˜λŠ” κ°œλ³„μ μΈ λ‹¨μœ„ - μ‚¬μš© 이유: ν”„λ‘œκ·Έλž¨μ˜ μ—¬λŸ¬ 뢀뢄을 λ™μ‹œμ— μ‹€ν–‰ν•˜μ—¬ νš¨μœ¨μ„±μ„ μ¦κ°€μ‹œν‚€κ³  응닡성을 ν–₯μƒμ‹œν‚¬ 수 있음.

λ™μ‹œμ„± - ν•˜λ‚˜μ˜ μž‘μ—… λ‚΄μ—μ„œ μ—¬λŸ¬ κ°œμ˜Β μ„œλΈŒ νƒœμŠ€ν¬(subtask)λ₯Ό λ™μ‹œμ— μ²˜λ¦¬ν•˜λŠ” 것을 λ§ν•œλ‹€. μ΄λŠ” μ—¬λŸ¬ 개의 μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•˜μ—¬ ν•˜λ‚˜μ˜ μž‘μ—…μ„ λΆ„ν• ν•˜μ—¬ μ²˜λ¦¬ν•˜κ±°λ‚˜, λΉ„λ™κΈ°μ μœΌλ‘œ μ—¬λŸ¬ 개의 μž‘μ—…μ„ μ²˜λ¦¬ν•˜λŠ” 것 등을 λ§ν•œλ‹€. | - ν•˜λ“œμ›¨μ–΄μ μΈ 츑면으둜 λ³΄μ•˜μ„ λ•ŒλŠ” λ©€ν‹°νƒœμŠ€ν‚Ήμ΄ λ™μ‹œμ„±λ³΄λ‹€ μƒμœ„μ˜ 인자둜 μœ„μΉ˜ν•΄μžˆλ‹€. | | 병렬성 vs λ™μ‹œμ„± | λ™μ‹œμ„±: ν•˜λ‚˜μ˜ μ‹œμŠ€ν…œμ΄ μ—¬λŸ¬ μž‘μ—…μ„ λ™μ‹œμ— μ²˜λ¦¬ν•˜λŠ” κ²ƒμ²˜λŸΌ 보이게 ν•˜λŠ” 것 (μ‹€μ œλ‘œλŠ” λ²ˆκ°ˆμ•„κ°€λ©° 처리) 병렬성: 병렬성은 μ—¬λŸ¬ μž‘μ—…μ„ μ‹€μ œλ‘œ λ™μ‹œμ— μ²˜λ¦¬ν•˜λŠ” 것이닀. | - 병렬성과 λ™μ‹œμ„±μ€ λΉ„μŠ·ν•΄ λ³΄μ΄μ§€λ§Œ μ™„μ „νžˆ λ‹€λ₯Έ κ°œλ…μ΄λ‹€. 병렬성은 μ—¬λŸ¬ μž‘μ—…μ΄ λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” κ²ƒμ΄μ§€λ§Œ, μ΄λŸ¬ν•œ μž‘μ—…λ“€μ€ 각각이 λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰λ˜λ©° μ„œλ‘œ 영ν–₯을 μ£Όμ§€ μ•ŠλŠ”λ‹€. λ°˜λ©΄μ— λ™μ‹œμ„±μ€ μ„œλ‘œ λ‹€λ₯Έ μž‘μ—…λ“€μ΄ μ„œλ‘œ 영ν–₯을 μ£Όλ©΄μ„œ λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” κ²ƒμ²˜λŸΌ 보인닀.

λ™μ‹œμ„± - μ‹±κΈ€ μ½”μ–΄μ—μ„œ λ©€ν‹° μ“°λ ˆλ“œ(Multi thread)λ₯Ό λ™μž‘ μ‹œν‚€λŠ” 방식 (논리적인 κ°œλ…) 병렬성 - λ©€ν‹° μ½”μ–΄μ—μ„œ λ©€ν‹° μ“°λ ˆλ“œ(Multi thread)λ₯Ό λ™μž‘μ‹œν‚€λŠ” 방식 (물리적인 κ°œλ…) | | μŠ€λ ˆλ“œλ₯Ό μ•Œμ•„μ•Όν•˜λŠ” 이유 | 1. **λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ 독립성 κ΄€λ ¨ 문제 상황 각 μŠ€λ ˆλ“œλŠ” κ³ μœ ν•œ μŠ€νƒμ„ κ°€μ§€κ³  μžˆμ–΄μ„œ μŠ€λ ˆλ“œμ˜ ν•¨μˆ˜ 호좜과 μ§€μ—­ λ³€μˆ˜λŠ” λ‹€λ₯Έ μŠ€λ ˆλ“œμ™€ λ…λ¦½μ μœΌλ‘œ κ΄€λ¦¬λœλ‹€. 이런 κ΅¬μ‘°λŠ” μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ λ™μΌν•œ λ©”λͺ¨λ¦¬ 곡간에 μ ‘κ·Όν•  λ•Œ 동기화 문제λ₯Ό μΌμœΌν‚¬ 수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œκ°€ 곡유된 데이터λ₯Ό μˆ˜μ •ν•˜λŠ” λ™μ•ˆ λ‹€λ₯Έ μŠ€λ ˆλ“œλ„ λ™μΌν•œ 데이터에 μ ‘κ·Όν•˜λ €κ³  ν•˜λ©΄ 데이터 무결성이 깨질 수 μžˆλ‹€. 이λ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄μ„œλŠ” μŠ€λ ˆλ“œ κ°„μ˜ λ©”λͺ¨λ¦¬ 접근을 잘 μ‘°μ •ν•˜κ³ , ν•„μš”ν•œ 경우 λ½μ΄λ‚˜ λ‹€λ₯Έ 동기화 λ©”μ»€λ‹ˆμ¦˜μ„ μ‚¬μš©ν•˜μ—¬ λ°μ΄ν„°μ˜ 일관성과 μ•ˆμ •μ„±μ„ μœ μ§€ν•΄μ•Ό ν•œλ‹€.

  1. μžμ› λˆ„μˆ˜ λ°©μ§€ κ΄€λ ¨ 문제 상황 μŠ€λ ˆλ“œκ°€ μƒμ„±λ˜κ³  μ’…λ£Œλ  λ•Œ, μžμ›μ˜ ν• λ‹Ήκ³Ό ν•΄μ œκ°€ 적절히 이루어지지 μ•ŠμœΌλ©΄ μžμ› λˆ„μˆ˜κ°€ λ°œμƒν•  수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, μŠ€λ ˆλ“œκ°€ 파일 ν•Έλ“€λŸ¬λ‚˜ λ„€νŠΈμ›Œν¬ μ—°κ²°, λ©”λͺ¨λ¦¬ ν• λ‹Ή 등을 μ‚¬μš©ν•˜κ³  이λ₯Ό μ œλŒ€λ‘œ ν•΄μ œν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄, μ‹œμŠ€ν…œμ˜ μ„±λŠ₯ μ €ν•˜λ‚˜ μΆ©λŒμ„ μ΄ˆλž˜ν•  수 μžˆλ‹€.

  2. λ™μ‹œμ„± 문제 ν•΄κ²° κ΄€λ ¨ 문제 상황 μŠ€λ ˆλ“œλŠ” λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰λ˜λ©΄μ„œ λ™μ‹œμ— μ—¬λŸ¬ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€. μ΄λŸ¬ν•œ λ™μ‹œμ„±μ€ ν”„λ‘œκ·Έλž¨μ˜ μ„±λŠ₯을 크게 ν–₯μƒμ‹œν‚¬ 수 μžˆμ§€λ§Œ, λ™μ‹œμ— μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ 같은 μžμ›μ— μ ‘κ·Όν•˜λ €κ³  ν•  λ•Œ 경쟁 쑰건(race condition)μ΄λ‚˜ ꡐ착 μƒνƒœ(deadlock) 같은 λ™μ‹œμ„± κ΄€λ ¨ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€.** | | | μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­ | ν•œ μŠ€λ ˆλ“œμ˜ μƒνƒœλ₯Ό λ‹€λ₯Έ μŠ€λ ˆλ“œλ‘œ μ „λ‹¬ν•΄μ£ΌλŠ” κ³Όμ • | | | λ™μ‹œμ„± 관리 | λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” μž‘μ—…λ“€ κ°„μ˜ μΆ©λŒμ„ μ΅œμ†Œν™” | | | μ˜€λ²„ν—€λ“œ | - νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ 처리 μ‹œκ°„, λ©”λͺ¨λ¦¬, λ˜λŠ” λ‹€λ₯Έ μ»΄ν“¨νŒ… μžμ›μ„ μ΄ˆκ³Όν•˜μ—¬ μ‚¬μš©λ˜λŠ” λΆ€λΆ„

  1. 2개 μŠ€λ ˆλ“œμ—μ„œ ν•  일을 2개의 ν”„λ‘œμ„ΈμŠ€μ—μ„œ ν•˜λ©΄ μ•ˆλ˜λ‚˜μš”?

    1. μžμ› μ‚¬μš© νš¨μœ¨μ„±: μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€ λ‚΄ λ©”λͺ¨λ¦¬λ₯Ό κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ—, ν”„λ‘œμ„ΈμŠ€λ³΄λ‹€ 더 적은 μžμ›μ„ μ‚¬μš©ν•©λ‹ˆλ‹€. μ΄λŠ” λ©”λͺ¨λ¦¬μ˜ 좔가적인 ν™•μž₯ ν•œκ³„λ₯Ό κ³ λ €ν•  λ•Œ μ€‘μš”ν•˜λ‹€.
    2. 톡신 μš©μ΄μ„±: 같은 ν”„λ‘œμ„ΈμŠ€ λ‚΄ μŠ€λ ˆλ“œλΌλ¦¬λŠ” λ©”λͺ¨λ¦¬λ₯Ό κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ—, 데이터 κ³΅μœ κ°€ μš©μ΄ν•©λ‹ˆλ‹€. μ΄λŠ” λ³΅μž‘ν•œ ν”„λ‘œμ„ΈμŠ€ κ°„ 톡신보닀 νš¨μœ¨μ μ΄λ‹€.
    3. λΉ λ₯Έ 처리 속도: μŠ€λ ˆλ“œ κ°„ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ€ ν”„λ‘œμ„ΈμŠ€ κ°„ μ „ν™˜λ³΄λ‹€ 더 적은 μ‹œκ°„κ³Ό μžμ›μ„ μ†Œλͺ¨ν•˜λ―€λ‘œ, 처리 속도가 ν–₯μƒλœλ‹€.
  2. 그럼 λ°˜λŒ€λ‘œ μƒκ°ν•˜λ©΄, ν”„λ‘œμ„ΈμŠ€λ₯Ό μ΅œλŒ€ν•œ 적게 μ‚¬μš©ν•˜κ³  μŠ€λ ˆλ“œλ₯Ό μ΅œλŒ€ν•œ 많이 μ‚¬μš©ν•˜λ©΄ μ’‹μ€κ±°λ„€μš”?

    1. μžμ› 곡유의 λ³΅μž‘μ„±: μŠ€λ ˆλ“œλ“€μ΄ λ©”λͺ¨λ¦¬μ™€ μžμ›μ„ κ³΅μœ ν•˜λ―€λ‘œ, 이둜 μΈν•œ λ™μ‹œμ„± λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€. μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ λ™μΌν•œ 데이터에 μ ‘κ·Όν•˜λ € ν•  λ•Œ, λ°μ΄ν„°μ˜ 일관성과 무결성을 μœ μ§€ν•˜κΈ° μœ„ν•œ 좔가적인 동기화 μž‘μ—…μ΄ ν•„μš”ν•˜λ‹€.
    2. μ•ˆμ •μ„± 문제: ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œμ—μ„œ λ°œμƒν•œ λ¬Έμ œκ°€ 전체 ν”„λ‘œμ„ΈμŠ€μ— 영ν–₯을 쀄 수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œμ—μ„œ μ˜ˆμ™Έκ°€ μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ 전체 ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλ  수 μžˆλ‹€.
    3. μŠ€λ ˆλ“œ μ˜€λ²„ν—€λ“œ: μŠ€λ ˆλ“œμ˜ μˆ˜κ°€ λ„ˆλ¬΄ λ§Žμ•„μ§€λ©΄, μŠ€λ ˆλ“œ 관리λ₯Ό μœ„ν•œ μ˜€λ²„ν—€λ“œκ°€ μ¦κ°€ν•˜κ³  μ„±λŠ₯이 μ €ν•˜λ  수 μžˆμŠ΅λ‹ˆλ‹€. μŠ€λ ˆλ“œ κ°„μ˜ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­ λΉ„μš©λ„ λ¬΄μ‹œν•  수 μ—†λŠ” μˆ˜μ€€μœΌλ‘œ 컀질 수 μžˆμŠ΅λ‹ˆλ‹€.
  3. λ©€ν‹° μ½”μ–΄μ—μ„œ λ©€ν‹° μ“°λ ˆλ“œλ₯Ό λ³‘λ ¬μ„±μœΌλ‘œ λ™μž‘μ‹œν‚¬λ•Œ (μ—¬λŸ¬ μž‘μ—…μ΄ λ™μ‹œμ— μ‹€ν–‰λ˜λ©° μ„œλ‘œ 영ν–₯을 μ£Όμ§€ μ•ŠλŠ”λ‹€κ³ ν•˜λŠ”λ°, 그럼) μŠ€λ ˆλ“œ 사이에 μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ΄ μ•ˆ μΌμ–΄λ‚œλ‹€λŠ” λ§μΈκ°€μš”? 예! ν•˜μ§€λ§Œ μ½”μ–΄ μˆ˜λ³΄λ‹€ λ§Žμ€ μŠ€λ ˆλ“œκ°€ μ‘΄μž¬ν•˜λŠ” κ²½μš°μ—λŠ” μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ΄ 일어날 수 μžˆλ‹€.