1.2 KiB
Concurrency — First Principles
1. The Principles
P1. Immutability by Default
Mutable shared state is the enemy. The default is immutable; mutation is justified.
P2. Single Responsibility for Threads
Each unit of work has one owner. No "anyone can touch this" state.
P3. Boundaries are Locks
Synchronization happens at well-defined places. Lock scope is minimal and explicit.
P4. Determinism Over Speed
Correct concurrent code is faster than incorrect concurrent code. Race conditions are not "fast enough" — they are wrong.
P5. Lock Minimization
Locks are expensive and dangerous. Lock-free, wait-free, and message-passing are preferred where possible.
P6. No Silent Races
Race conditions are caught, not hidden. Tools (TSan, Go race detector) are part of CI.
P7. Cancellation Support
Every async operation can be cancelled. Cancellation is fast and complete.
P8. Timeout Discipline
Every blocking call has a timeout. Forever is not a duration.
P9. Bounded Queues
Unbounded queues are memory leaks in disguise. Bounded queues expose backpressure.
P10. Test for Race Conditions
Concurrent code is tested under concurrent load, not just happy-path correctness.