In this chapter, we're going to do a deep-dive on hopper, the grown-up version of Ring from Chapter 4, Sync and Send – the Foundation of Rust Concurrency. Hopper's approach to back-pressure—the weakness we identified in telem—is to block when filled to capacity, as SyncSender does. Hopper's special trick is that it pages out to disk. The hopper user defines how many bytes of in-memory space hopper is allowed to consume, like SyncSender, except in terms of bytes rather than total elements of T. Furthermore, the user is able to configure the number of on-disk bytes that are consumed when hopper's in-memory capacity is filled and it has to page out to disk. The other properties of MSPC are held, in-order delivery, retention of data once stored, and so on.
Before we can dig through...