一天浏览一本书-----《多线程编程杂谈》

下附原件::: 

 

在采用多线程方法设计程序时,如果产生的额外开销大于线程的工作任务,就没有并行的必要。线程并不是越多越好,软件线程的数量尽量能与硬件线程的数量相匹配。最好根据实际的需要,通过不断的调优,来确定线程数量的最佳值。

线程启停以及线程上下文切换会引起额外的开销,所以消耗的时间比单线程多。

读写锁就是罪魁祸首

 

在实际测试过程中,不加锁的三线程方案非常不稳定,有时所花费的时间相差4 倍

多。

要提高并行程序的性能,在设计时就需要在较少同步和较多同步之间寻求折中。同步

太少会导致错误的结果,同步太多又会导致效率过低。尽量使用私有锁,降低锁的粒度。

无锁设计既有优点也有缺点,无锁方案能充分提高效率,但使得设计更加复杂,维护操作

困难,不得不借助其他机制来保证程序的正确性。

针对Cache 的优化

 

处理器交换的最小单元是cache 行,或称cache 块。在多核体系中,对于不共享cache

的架构来说,两个独立的cache 在需要读取同一cache 行时,会共享该cache 行,如果在其

中一个cache中,该cache行被写入,而在另一个cache中该cache行被读取,那么即使读写的地址不相交,也需要在这两个cache之间移动数据,这就被称为cache伪共享,导致执行核必须在存储总线上来回传递这个Cache行,这种现象被称为“乒乓效应”。

 

__attribute__((__aligned__(L1_CACHE_BYTES)))来确定cache的大小。

CPU亲和力可分为两大类:软亲和力和硬亲和力。

采用多核多线程并行设计方案,能有效提高性能,但如果考虑不全面,如忽略带宽、数据竞争及数据同步不当等因素,效率反而降低,程序执行越来越慢。

 

 

你可能感兴趣的:(多线程,c,linux,职场,休闲)