The actors pitch lays out a simple design for how code is executed on an actor. I will summarize this briefly, and along the way I'll point out some perceived problems.
Conceptually, an actor has an exclusive execution service ("executor"). When a task wants to start running on an actor, it "parks" itself, becoming an opaque chunk of work that can be run by an executor (a "partial task"). It then submits itself to the actor's executor to run.
By default, actors use a standard executor implementation provided by the Swift runtime using a certain amount of inline storage in the actor object. The standard implementation is less like a serial queue and more like an "asynchronous lock". If there's no contention on an actor, a task can switch to it by simply continuing execution on the current thread without any interruption. The standard-implementation actors are able to freely shift between threads: running for awhile