首页 > 代码库 > 有关多线程程序开发

有关多线程程序开发

多线程程序设计的困难

  • 难以重现失败,bug难以追踪
  • 并发错误难以追踪和消除
  • 独立任务的拆分并不总是那么明朗
  • 线程同步、通信引入的复杂
  • 多线程引发的竞争、死锁、可见性问题(难以调试、追踪)
  • 测试困难,简单的测试并不能覆盖生产环境的问题
  • 设计不当,并不能充分提升性能(不控制线程数量,造成无谓上下文切换和Cache失效)

  

多线程引入的开销

  

  • 上下文切换【包括Cache】
  • 内存同步/Memory Barrier【java中的synchronized 和 volatile】
  • 内存开销

  

多线程程序优化

  • 线程池(优化掉线程创建、销毁开销),适当的大小
  • CPU affinity(有效利用Cache)
  • 无锁数据结构
  • 空闲线程适时休眠(减少无用切换)
  • 适当的优先级调整

有关多线程程序开发