612
4
부
고급 주제 및 실전 응용
17.3
액터를 활용해서 튼튼하고 확장성 있는 동시성 프로그래밍하기
액터는 원래 인공 지능 연구에서 사용하기 위해 고안된 것이다. 칼 휴잇
Carl
Hewitt
과 동료들이 작
성한
1973
년 논문 (
2014
년 버전이
arxiv
.
org
(
http
://
bit
.
ly
/
1082H6P
)에 있다)에 이에 대
한 설명이 있다. 또한 굴 아가
Gul
Agha
는
1987
년
MIT
출판부에서 펴낸 책 『
Actors
』에서 액터 모
델에 대해 설명했다. 액터는 얼랭
Erlang
언어와 그 가상 머신에 들어 있는 핵심 개념이다. 스칼라와
같은 다른 언어에서는 액터를 다른 동시성 추상화를 기반으로 하는 라이브러리로 구현한다.
근본적으로 액터는 메시지를 받고, 그 메시지에 따라 동작을 수행하는 객체다. 이때 선점하지 않
고 한 번에 한 메시지만 처리한다. 몇몇 액터 시스템에서는 메시지 도착순서가 중요하지 않지만,
모든 시스템에서 그런 것은 아니다. 액터는 내부적으로 메시지를 처리할 수도 있고, 그 메시지를
다른 액터에 전달하거나, 새로운 메시지를 다른 액터에 보낼 수 있다. 메시지를 처리하는 동안
액터가 다른 액터를 새로 만들 수도 있다. 액터는 메시지를 처리하는 방법을 스스로 바꿀 수도
있다. 그런 경우 상태 기계에서 상태 천이를 구현하는 것과 동일한 효과가 있다.
메서드 호출을 사용하는 전통적인 객체 시스템과 달리, 액터 메시지 송신은 보통 비동기적이다.
따라서 전체에서 각 액션이 수행되는 순서는 비결정적이다. 전통적인 객체와 ...