The actor model is a model of concurrent computation introduced by Carl Hewitt, Peter Bishop, and Richard Steiger in their 1973 paper “A Universal Modular ACTOR Formalism for Artificial Intelligence,” presented at the Third International Joint Conference on Artificial Intelligence. The paper proposes building systems from a single kind of object, the actor, and defining “all of the modes of behavior” in terms of one operation: sending messages to actors.
In this model each actor is an independent unit with its own private state and its own mailbox. Actors never read or write one another’s memory; the only way they affect each other is by sending asynchronous messages. Because there is no shared state, there are no locks to manage and no data races of the kind that plague thread-and-lock concurrency.
When an actor receives a message it can do three things: change its own internal state, send messages to other actors, and create new actors. This small set of capabilities turns out to be enough to express rich concurrent behavior, and it scales naturally because actors can run independently and in parallel.
The model moved from theory into widely used software through Erlang, whose lightweight processes are isolated and, as the Erlang FAQ describes, communicate only by message passing with no shared memory. The same ideas were later carried into the Java and Scala world by frameworks such as Akka, making the actor model one of the most influential answers to the problem of writing correct concurrent programs.