在实践中运用多线程
挖掘可并发点
1、并发化策略
1.1、基于数据分割
如果程序的原始输入数据的规模比较大,那么可以采用基于数据的分割
1.1.1、从程序处理的数据入手
1.1.2、产生若干个同质工作者线程
1.2、基于任务分割
为了提高任务的执行效率,我们可能使用多个线程去共同完成一个任务的执行。这就是基于任务的分割
1.2.1、从程序处理逻辑入手
1.2.2、产生若干个互相协作的异质工作者线程
1.2.3、分割方法:a、按任务的资源消耗属性分割;b、按处理步骤分割
2、实战注意事项
2.1、多线程程序比相应的单线程程序要复杂,且未必比单线程程序快:从单线程程序想多线程程序”进化”
2.2、线程数的合理设置
2.2.1、Amdahl’s定律:Smax = 1/(P+(1-P)/N)。
处理器数量:N程序中必须串行的部分耗时占程序全部耗时的比率为P,获得理论最大提速Smax
2.2.2、常见考虑因素:处理器数目,任务的性质(处理器密集型,IO密集型),资源使用规划,稀缺资源使用情况
2.3、更快的代价:额外的开销
2.4、工作者线程异常处理
2.5、原始规模未知问题的应对策略