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.