Runtimes, Wakers, and the Reactor-Executor Pattern 176 We'll change our design so that it looks more like this: Figure 8. 4-Executor and Future chain: design 2 In this design, we use the knowledge we gained in Chapter 4, but instead of simply relying on epoll, we'll use mio 's cross-platform abstraction instead. The way it works should be well known to us by now since we already implemented a simplified version of it earlier. Instead of continuously looping and polling our top-level future, we'll register interest with the Poll instance, and when we get a Not Ready result returned, we wait on Poll. This will put the thread to sleep, and no work will be done until the OS wakes us up again to notify us that an event we're waiting on is ready. This design will be much more efficient and scalable. 