多线程程序设计的困难
- 难以重现失败,bug难以追踪
- 并发错误难以追踪和消除
- 独立任务的拆分并不总是那么明朗
- 线程同步、通信引入的复杂
- 多线程引发的竞争、死锁、可见性问题(难以调试、追踪)
- 测试困难,简单的测试并不能覆盖生产环境的问题
- 设计不当,并不能充分提升性能(不控制线程数量,造成无谓上下文切换和Cache失效)
多线程引入的开销
- 上下文切换【包括Cache】
- 内存同步/Memory Barrier【java中的synchronized 和 volatile】
- 锁
- 内存开销
多线程程序优化
- 线程池(优化掉线程创建、销毁开销),适当的大小
- CPU affinity(有效利用Cache)
- 无锁数据结构
- 空闲线程适时休眠(减少无用切换)
- 适当的优先级调整
时间: 2025-01-07 10:19:36