Motivation • Develop language for concurrency “Parallel Execution of actions”.
Brief History • A number of individuals have contributed to the development of the actor model. • Actor model was first described by Carl Hewitt (70’s) • The model was object-oriented: every object was a computationally active entity capable of receiving and reacting to messages. The Objects were called Actors. • Gul Agha, later develop the actor model and develop a mathematical theory of actors.
What are actors ? Actors are independent concurrent objects that interact by sending asynchronous messages; each actor has its mail address and a behavior. An actor can do the following: • Send communication to other actors. • Create new actors. • Define a new behavior for itself, which may be the same or different to its previous behavior.
Behavior change • Higher level than state change (assignment) • The current behavior of an actor will specify its replacement behavior • How it will perform the next incoming message • A behavior accepts only one message • A causally connected chain of behaviors isomorphic to the queue of messages
Mail System Two important facts about mail system in the actor system: • Mail arrives in random, non deterministic order (asynchronous). • Ensures concurrent execution. • The mail delivery is guaranteed. • The system guarantees to execute all tasks eventually.
Communication Mechanisms • Communication is asynchronous, without any guaranteed arrival order. • Message order: if actor A sends a sequence of communications to actor B, then B may not receive them in the same order that A sent them. • It is possible for A to tag each message with a sequence number, so that B may rearrange messages into the correct order.
Extending the Actalk framework towards ACTORS ActorBehavior subclass: #AghaActorBehavior setProcess [self acceptNextMessage] fork replace: replacementBehavior aself initializeBehavior: replacementBehavior
Example AghaActorBehavior subclass: #AghaCounter instanceVariables: ‘contents’ consultAndReplyTo: replyDestination self replace: (self class contents: contents). replyDestination reply: contents incr self replace: (self class contents: contents + 1) reset self replace: (self class contents: 0)
References • Agha, Gul, Actors: A Model of Concurrent Computation in Distributed Systems. MIT Press, 1986, 144 p. • Open Systems Laboratory • http://osl.cs.uiuc.edu/