동시성 제어 / Concurrency

Monitor & Message Passing
인터랙티브 시각화

모니터 내부로 들어온 스레드만 실행됩니다. wait()하면 조건 대기열로 이동하고, signal()하면 깨어납니다.

모니터 시각화 입장 대기열, 실행 영역, 조건 대기열로 구성된 모니터 구조 Monitor 입장 대기열 entry queue 조건 대기열 condition queue 실행 중인 스레드 active thread 조건 변수 (condition var) wait() 호출 시 이동 wait() signal()
스레드를 입장시켜 보세요

채널(channel)로 메시지를 send하고 receive합니다. 공유 메모리 없이 통신 — Go의 goroutine + channel 모델과 같습니다.

메시지 전달 시각화 Sender와 Receiver가 버퍼 크기 3인 채널을 통해 메시지를 주고받는 구조 Sender Thread A send(msg) Receiver Thread B receive() Channel buffer: 3 채널 가득 — 블로킹 메시지 없음 — 블로킹
send()로 채널에 메시지를 넣어보세요

MONITOR

  • 공유 자원 + 락 + 조건변수를 하나로 캡슐화
  • 한 번에 스레드 1개만 실행
  • wait() → 락 해제 후 조건 대기열에서 수면
  • signal() → 대기 중인 스레드를 깨움
  • Java synchronized, Python Condition

MESSAGE PASSING

  • 공유 메모리 없음 — 채널로만 통신
  • 버퍼 가득 → send() 블로킹
  • 버퍼 비면 → receive() 블로킹
  • Go channel, Erlang, Rust mpsc
  • 동기화 문제를 구조적으로 제거