πŸ™Œ ν”„λ‘œμ„ΈμŠ€ ν˜‘λ ₯을 ν—ˆμš©ν•˜λŠ” 이유

λͺ¨λ“ˆν™” 및 νƒœμŠ€ν¬λ₯Ό λΆ„ν• ν•˜μ—¬ λ³‘λ ¬λ‘œ μ‹€ν–‰ν•˜μ—¬ κ³„μ‚°μ†λ„μ˜ ν–₯상과 λͺ¨λ“ˆμ„±μ„ μ œκ³΅ν•˜κΈ° μœ„ν•΄μ„œ
정보λ₯Ό λ³‘ν–‰μ μœΌλ‘œ μ ‘κ·Ό κ°€λŠ₯ν•œ 정보 곡유의 ν™˜κ²½μ„ μ œκ³΅ν•΄μ•Όν•œλ‹€.

🌞 ν”„λ‘œμ„ΈμŠ€ κ°„ 톡신 λͺ¨λΈ

  • 곡유 λ©”λͺ¨λ¦¬(shared memory): 초기 ꡬ성 λ‹¨κ³„μ—μ„œλ§Œ μ‹œμŠ€ν…œ μ½œμ„ μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— λΉ λ₯΄λ‹€. ꡬ좕 μ΄ν›„μ—λŠ” 일반적인 λ©”λͺ¨λ¦¬ μ ‘κ·ΌμœΌλ‘œ μ·¨κΈ‰λ˜μ–΄ μ»€λ„μ˜ 도움이 ν•„μš”ν•˜μ§€ μ•Šλ‹€.
  • λ©”μ‹œμ§€ 전달(message passing): μΆ©λŒμ„ νšŒν”Όν•  ν•„μš”κ°€ μ—†κ³  κ΅¬ν˜„μ΄ μš©μ΄ν•˜μ§€λ§Œ 곡유 λ©”λͺ¨λ¦¬μ— λΉ„ν•΄ μ˜€λ²„ν—€λ“œκ°€ 크닀.

🎈 곡유 λ©”λͺ¨λ¦¬ κΈ°λ³Έκ°œλ…

일반적으둜 μš΄μ˜μ²΄μ œλŠ” ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ 타 ν”„λ‘œμ„ΈμŠ€μ˜ λ©”λͺ¨λ¦¬μ— μ ‘κ·Όν•˜λŠ” 것을 κΈˆμ§€ν•œλ‹€.
λ‘˜ μ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ 이 μ œμ•½μ‘°κ±΄μ„ μ œκ±°ν•˜λ―€λ‘œμ¨ 곡유 λ©”λͺ¨λ¦¬κ°€ μ™„μ„±λœλ‹€.

πŸ›’ 곡유 λ©”λͺ¨λ¦¬μ˜ μ†ŒλΉ„μž-μƒμ‚°μž 문제

μƒμ‚°μžμ™€ μ†ŒλΉ„μž ν”„λ‘œμ„ΈμŠ€λ“€μ΄ λ³‘ν–‰μœΌλ‘œ μ‹€ν–‰λ˜λ„λ‘ ν•˜λ €λ©΄, μƒμ‚°μžκ°€ 정보λ₯Ό μ±„μ›Œ λ„£κ³  μ†ŒλΉ„μžλŠ” 버퍼λ₯Ό μ‚¬μš©ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.

λ¬΄ν•œλ²„νΌ

  • 버퍼가 λΉ„μ–΄μžˆμœΌλ©΄ μ†ŒλΉ„μžλŠ” κΈ°λ‹€λ €μ•Όν•œλ‹€.

μœ ν•œλ²„νΌ

  • μƒμ‚°μžλŠ” 버퍼가 가득 μ°¨ 있으면 κΈ°λ‹€λ €μ•Όλ§Œ ν•œλ‹€.
  • 버퍼가 λΉ„μ–΄μžˆμœΌλ©΄ μ†ŒλΉ„μžλŠ” κΈ°λ‹€λ €μ•Όν•œλ‹€.

🎁 λ©”μ‹œμ§€ 전달 μ‹œμŠ€ν…œ

직접톡신 πŸ“ž

  • λŒ€μΉ­μ  μ†‘μ‹ μžμ™€ μˆ˜μ‹ μž λͺ¨λ‘ μ„œλ‘œμ˜ 이름을 ν•„μš”λ‘œ ν•˜λŠ” 경우

  • λΉ„λŒ€μΉ­μ  μ†‘μ‹ μžλ§Œ μˆ˜μ‹ μžμ˜ 이름을 ν•„μš”λ‘œ ν•˜λŠ” 경우

ν•˜μ§€λ§Œ μ»΄νŒŒμΌμ‹œκ°„μ— 이름을 μ•Œ 수 μ—†κ³ , μƒλŒ€λ°© 이름이 달라지면 μ‚¬μš©ν•  수 μ—†λ‹€λŠ” λ‹¨μ μœΌλ‘œ κ°„μ ‘ν†΅μ‹ μ˜ λ©”μΌλ°•μŠ€λ₯Ό ν•΄κ²°μ±…μœΌλ‘œμ„œ μ‚¬μš©ν•œλ‹€.

간접톡신 πŸ“©

λ©”μΌλ°•μŠ€

  • ν”„λ‘œμ„ΈμŠ€λ“€μ— μ˜ν•΄ λ©”μ‹œμ§€λ“€μ΄ μƒμ„±λ˜κ³  μ œκ±°λ˜λŠ” 객체
  • 각 λ©”μΌλ°•μŠ€λŠ” κ³ μœ ν•œ IDλ₯Ό 가진닀 (POSIX μ—μ„œλŠ” μ •μˆ˜κ°’ μ‚¬μš©)
  • 각 연결은 ν•˜λ‚˜μ˜ λ©”μΌλ°•μŠ€μ— λŒ€μ‘ν•˜λ©°, λ‹€μˆ˜μ˜ μ„œλ‘œ λ‹€λ₯Έ 연결이 μ‘΄μž¬ν•  수 μžˆλ‹€.

μ‚¬μš©μ˜ˆμ‹œ

문제점

  • ν”„λ‘œμ„ΈμŠ€ μ„Έκ°œκ°€ λͺ¨λ‘ ν•œκ°œμ˜ λ©”μΌλ°•μŠ€λ₯Ό κ³΅μœ ν•  경우 μ–΄λŠ ν”„λ‘œμ„ΈμŠ€κ°€ λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•˜λŠ”κ°€?

ν•΄κ²°μ±…

  • ν•˜λ‚˜μ˜ λ§ν¬λŠ” μ΅œλŒ€ λ‘κ°œμ˜ ν”„λ‘œμ„ΈμŠ€μ™€ μ—°κ΄€λ˜κ²Œ ν•œλ‹€.
  • μ‹œμ μ„ λΆ„ν• ν•˜μ—¬ ν•œ μˆœκ°„μ— μ΅œλŒ€λ‘œ ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λ§Œ receive() μ‹€ν–‰ν•˜λ„λ‘ ν—ˆμš©ν•œλ‹€.
  • μ‹œμŠ€ν…œμ΄ μž„μ˜λ‘œ μ„€μ •ν•œλ‹€.

기타

동기식 전솑(Blocking, λ΄‰μ‡„ν˜•)

  • λ΄‰μ‡„ν˜• 보내기 - μˆ˜μ‹  λ°›μ„λ•ŒκΉŒμ§€ 솑신 λΆˆκ°€
  • λ΄‰μ‡„ν˜• λ°›κΈ° - λ©”μ‹œμ§€κ°€ 이용 κ°€λŠ₯ν•  λ•ŒκΉŒμ§€ μˆ˜μ‹  λΆˆκ°€

비동기식 전솑(Non-blocking, λ΄‰μ‡„ν˜•)

  • λΉ„λ΄‰μ‡„ν˜• 보내기
  • λΉ„λ΄‰μ‡„ν˜• λ°›κΈ°

λ©”μ‹œμ§€ 큐 κ΅¬ν˜„ 방식

  • 무 μš©λŸ‰ - μ†‘μ‹ μžλŠ” μˆ˜μ‹ μžκ°€ λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•  λ•ŒκΉŒμ§€ κΈ°λ‹€λ €μ•Ό 함. (Rendezvous)
  • μœ ν•œ μš©λŸ‰ - μ†‘μ‹ μžλŠ” 링크가 λ§Œμ›μ΄λ©΄ λ°˜λ“œμ‹œ λ΄‰μ‡„λ˜μ–΄μ•Ό 함.
  • λ¬΄ν•œ μš©λŸ‰ - μ†‘μ‹ μžλŠ” κ²°μ½” λ΄‰μ‡„λ˜μ§€ μ•ŠμŒ

포트(Port)

  • 포트λ₯Ό μ΄μš©ν•œ 전달도 간접톡신에 ν•΄λ‹Ήν•œλ‹€.
profile
DGU CSE

0개의 λŒ“κΈ€