性能优化系列文章导航:《新的职业目标,以及C++性能优化》
多线程C++程序优化checklist
(1)必须用线程时针对线程的目的、性质、数量进行有针对性的优化。(a)针对大量短小的线程,使用std::async替代std::thread。
(b)针对不同的线程进行不同的优化(分类)。
(b.1)对于cpu消耗密集型线程,创建与cpu核心数一样多的可执行线程。
(b.2)对于需要等待外部事件、接着执行短暂计算的可等待线程,要根据经验和现场情况配置线程数量,以达到“计算资源占用达到饱和”的目的。
(c)在基于任务的编程中使用任务队列和线程池。例如std::async。
(d)在单独的线程中执行I/O。不要在临界区执行I/O。
(2)编写无锁无同步的代码。
(a)面向事件编程。
(b)协程。
(c)消息传递。
(d)无锁编程。
(3)必须要同步时,编写让同步更加高效的代码。
(a)减少临界区范围。
(b)限制并发线程的数量。与cpu核数相等或更少。
(c)不要在单核系统上忙等待。
(d)不要永远等待。
(e)不要自己设计互斥量。
(f)限制生产者输出队列的长度。