- Introduction
- 1. Navigation
- 1.1. By topic
1.2. FAQs
- 1.3. Index
- Part 1: guide
- 2. Introduction
- 3. Concurrent programming
- 4. Async and await
- 5. More async/await topics
- 6. IO and issues with blocking
- 7. Concurrency primitives
- 8. Channels, locking, and synchronization
- 9. Tools for async programming
- 10. Destruction and clean-up
- 11. Futures
- 12. Runtimes
- 13. Timers and signal handling
- 14. Async iterators (streams)
- Part 2: reference
15. Implementing futures and streams
16. Alternate runtimes
17. Implementing your own runtime
18. async in sync, sync in async
19. Async IO: readiness vs completion, and io_uring
20. Design patterns
21. Cancellation
22. Starvation
23. Pinning
24. Async and FFI
25. Comparing async programming in Rust to other languages
26. The implementation of async/await in rustc
27. Structured concurrency?
- Old chapters
- 28. Getting Started
- 28.1. Why Async?
- 28.2. The State of Asynchronous Rust
- 28.3. async/.await Primer
- 29. Under the Hood: Executing Futures and Tasks
- 29.1. The Future Trait
- 29.2. Task Wakeups with Waker
- 29.3. Applied: Build an Executor
- 29.4. Executors and System IO
- 30. async/await
- 31. Pinning
- 32. Streams
- 32.1. Iteration and Concurrency
- 33. Executing Multiple Futures at a Time
- 33.1. join!
- 33.2. select!
- 33.3. Spawning
33.4. TODO: Cancellation and Timeouts
33.5. TODO: FuturesUnordered
- 34. Workarounds to Know and Love
- 34.1. Send Approximation
- 34.2. Recursion
- 34.3. async in Traits
- 35. The Async Ecosystem
- 36. Final Project: HTTP Server
- 36.1. Running Asynchronous Code
- 36.2. Handling Connections Concurrently
- 36.3. Testing the Server
37. TODO: I/O
37.1. TODO: AsyncRead and AsyncWrite
38. TODO: Asynchronous Design Patterns: Solutions and Suggestions
38.1. TODO: Modeling Servers and the Request/Response Pattern
38.2. TODO: Managing Shared State
- 39. Appendix: Translations of the Book