Async: Avoiding Disaster and Unbounded Growth
Information gathering
Your project is dynamic:
- Make it traceable
- Constantly monitor
Backpressure
Backpressure is the process of "pushing back" on producers that are too fast.
This throttles the system, but allows it to not fail.
Bounded vs. unbounded growth
- Bounded channels are predictable
- Unbounded are more dynamic
- Bounded provide backpressure
- Unbounded are useful if you know they are never beyond a certain size
Holding state
- Tasks can hold state
- Otherwise, Mutexes and RWlocks allow sharing
Dropping futures
- Dropping a future means cancelling it
- Be aware of what happens if it is cancelled
Shutting down
- Make sure your signal handling is centralized
- Every component should subscribe to a cancel notification
Implementing a custom Future: Pinning
- Futures are not allowed to move in Memory
- The type that describes that is called
Pin
- Pinning is hard, but there's support libraries
The poll protocol
Futures are poll
based - that means they get asked if they are complete.
- This happens an infinite number of times, until they mark themselves complete
- The process is optimised through the
Waker
type - Implementing poll yourself is rather easy