Spawning threads
`std::thread::spawn(|| { ... })` starts a new OS thread. The thread runs concurrently with the rest of your program. Call `.join()` on the returned handle to wait for completion.
For deeper background, see the canonical Rust learning roadmap for the broader context behind this section.
Sending values across threads
`std::sync::mpsc::channel()` returns a sender and receiver pair. The sender can be cloned and moved into worker threads; values arrive at the receiver in send order.
Sharing state safely
`Arc<Mutex<T>>` is the canonical pattern for shared mutable state. Arc gives you reference-counted ownership across threads; Mutex makes mutation atomic.
Compile-time safety
Send and Sync are auto traits that the compiler uses to decide what can cross thread boundaries. You very rarely have to think about them explicitly — the compiler will tell you when something doesn't fit.