Runtimes, Wakers, and the Reactor-Executor Pattern 186 Figure 8. 7-Executor and reactor: final design We have two parts that have no direct dependency on each other. We have an Executor that schedules tasks and passes on a Waker when polling a future that eventually will be caught and stored by the Reactor. When the Reactor receives a notification that an event is ready, it locates the Waker associated with that task and calls Wake::wake on it. This enables us to: Run several OS threads that each have their own executor, but share the same reactor Have multiple reactors that handle different kinds of leaf futures and make sure to wake up the correct executor when it can progress So, now that we have an idea of what to do, it's time to start writing it in code. 