The Actor Model
The Actor Model is a model of concurrent processing. It has much in common with the Object Model, familiar from Object-Oriented Programming, but extends it with native concurrency support.
Like objects in the Object Model, actors in the Actor Model are encapsulation mechanisms that protect access to internal state behind well-defined interfaces. But whereas traditional objects still allow external threads to execute the methods of objects -- and so access their private data, in the Actor Model external threads communicate with actors by means of asynchronous messages. Every actor behaves as if it contains an internal thread, used exclusively to execute its own code in response to messages.
In this sense, the Actor Model can be seen as a generalization of the Object Model to concurrent environments where objects may be executed by different threads, concurrently, rather than by a single thread in succession. Whereas the Object Model reduces the complexity of single-threaded programming by preventing access to the internal state of objects by external code, the Actor Model also prevents access by external threads. Because each actors's data is accessed only by its own, internal thread, actors are inherently concurrent and inherently thread-safe.
Better still, the Actor Model extends naturally to distributed programming. Because the model doesn't distinguish between local and remote actors, communication and synchronization with remote code is as easy as with local code.