토픽 29 / 85·프로세스 동기화와 교착상태
동시성 프로그래밍 모델 (Concurrency Programming Model)
동시성 프로그래밍 모델 (Concurrency Programming Model)
여러 작업을 동시에 또는 논리적으로 병행하여 실행하기 위한 프로그래밍 패러다임과 추상화 기법으로, 공유 메모리, 메시지 전달, 비동기 등 다양한 모델을 포함
목적: 처리량 향상, 응답성 개선, 자원 효율화, 병렬 하드웨어 활용
동시성 vs 병렬성: 동시성(Concurrency)은 논리적 동시 진행(단일코어 가능), 병렬성(Parallelism)은 물리적 동시 실행(멀티코어 필수)
주요 모델
- •스레드 기반(Shared Memory): 공유 메모리 접근, 뮤텍스/세마포어 동기화, 경쟁 조건·데드락 위험 (Java/C++/Python)
- •Actor 모델: 독립 액터 간 메시지 전달, 상태 캡슐화, 공유 메모리 없음, 위치 투명성 (Erlang/Akka/Elixir)
- •CSP(Communicating Sequential Processes): 채널 통한 프로세스 간 통신, 동기적 메시지 전달 (Go goroutine+channel)
- •코루틴(Coroutine): 협력적 멀티태스킹, 실행 지점 중단/재개, 가벼운 컨텍스트 전환 (Kotlin/Python/Lua)
- •async/await: 비동기 I/O, 이벤트 루프, Non-blocking, Future/Promise 패턴 (JavaScript/Python/Rust/C#)
- •STM(Software Transactional Memory): 트랜잭션 기반 메모리 접근, 락 프리, 원자성 보장 (Haskell/Clojure)
- •리액티브(Reactive): 데이터 스트림+변화 전파, 배압(Backpressure), Observable/Publisher (RxJava/Reactor/Akka Streams)
그린 스레드(Green Thread): 사용자 공간 스레드, OS 스레드보다 가벼움, M:N 스케줄링 (Go goroutine, Java Virtual Thread, Erlang process)
이벤트 루프(Event Loop): 단일 스레드+비동기 I/O, 콜백 큐, 높은 동시 연결 처리 (Node.js, Python asyncio, Nginx)
비교: 스레드(직관적/위험/OS의존) vs Actor(안전/메시지비용/Erlang) vs CSP(채널/동기/Go) vs async(비동기/콜백복잡/JS) vs 코루틴(경량/협력적/Kotlin)
적용사례: 웹서버(async/이벤트루프), 분산시스템(Actor), 시스템프로그래밍(스레드), 게임서버(코루틴)
연관: 프로세스, 스레드, 동기화, 멀티코어, 이벤트 기반 아키텍처