26 lines
1.1 KiB
Markdown
26 lines
1.1 KiB
Markdown
---
|
|
trigger: always_on
|
|
---
|
|
|
|
## Concurrency and Threading Mandate
|
|
|
|
### When to Use Concurrency
|
|
|
|
**I/O-Bound Operations:** Use asynchronous I/O, event-driven concurrency, or coroutines when waiting on network requests, file I/O, or database queries.
|
|
|
|
**CPU-Bound Operations:** Use OS threads or thread pools for heavy computation, data processing, or encoding work where CPU cycles dominate.
|
|
|
|
**Don't Over-Use Concurrency:** Concurrency adds significant complexity (race conditions, deadlocks, debugging difficulty). Profile first — only add concurrency when there is a measurable performance benefit.
|
|
|
|
For implementation details (race condition prevention, deadlock avoidance, message passing patterns), see Concurrency and Threading Principles @concurrency-and-threading-principles.md.
|
|
|
|
### When NOT to Use Concurrency
|
|
- Simple synchronous operations
|
|
- No measurable performance benefit
|
|
- Avoid premature optimization
|
|
|
|
### Related Principles
|
|
- Concurrency and Threading Principles @concurrency-and-threading-principles.md
|
|
- Performance Optimization Principles @performance-optimization-principles.md
|
|
- Rust Idioms and Patterns @rust-idioms-and-patterns.md
|