-
No. 1
Rust owns the mailbox, Python owns the loop
A queue plus a pipe byte joins them. The byte is only a hint; the queue is the truth.
-
No. 2
Who owns the thread?
Async: the thread lives inside the loop. Sync: the loop lives inside the thread, and only wakes up when called.
-
No. 3
How handle.get() wakes up
No asyncio loop, no pipe, no busy polling: a watch channel, a waker, and a blocked thread with the GIL released.
-
No. 4
How await handle wakes the asyncio loop
The byte wakes the loop; the token says which await completed. The Tokio observer never runs the Python coroutine.
-
No. 5
A body future: Python in, Python out
Both ends are Python. Rust holds one reference and reports that it is ready: the same reporting mechanism a native task uses.
-
No. 6
How a sync actor works
One Python thread owns the actor: callbacks run between messages, .get() borrows its cached private loop, and stop waits for Thread.join().