An Actor is a fundamental unit of computation.
An actor can do:
* processing
* storage (state)
* communication
Actors exist within a system
When an actor receives a message it can:
* create more actors
* send messages to existing actors that it knows
* designate what to do with the next message it will receive (in the examples given, this was to update internal state)
Actors have a many to many relationship with addresses
* Addresses are assigned by the system framework on machine
* Between machines use encryption
Addresses are like 'capabilities'
* Delivery order not guaranteed
** If you need a certain delivery order, create another actor called a 'sequence' and send that.
* Delivery not guaranteed - best efforts
** Sender may wish to persist and resend if ACK not received
* Message is delivered at most once
* There are no channels
Non-determinancy: random Indeterminancy: We don't know the answer until it happens
The actor programming model supports indeterminancy
* Two inputs, possibly simultaneous
* Two possible outputs, but only one possible outcome - the ball is in or out
cf: Petri-net
Actors are an alternative programming model:
* Functional programming cannot solve / model some problems
* Turing machine cannot solve / model some problems