.

多核和多CPU编程并行发程序的设计模

白癜风怎么治疗最好呢 https://baike.baidu.com/item/%E9%A3%8E%E6%9D%A5%E4%BA%86%C2%B7%E5%B8%A6%E4%BD%A0%E8%B5%B0%E5%87%BA%E7%99%BD%E7%99%9C%E9%A3%8E%E9%98%B4%E9%9C%BE/20783753?fr=aladdin
一、并发和并行的处理机制

在实际的应用场景中,并行和并发的现象是常见的,因此,在不断的发展过程中,发现其需要解决的问题可以分成三种类型:1、工作任务的分解工作任务指的是具体的任务有什么,可不可以划分成独立的执行任务,可不可以每个独立任务同时运行。比如几个监控页面同时显示问题。2、数据的分解这个就非常常见了,比如要同时从两个表里拿数据,可不可以用两个线程同时进行。3、数据流的分解数据流的分解,其实更类似于任务和数据的处理流程的分解,典型的如CPU的流水线设计。

基本上,通过这三种类型的处理机制分析,可以把现实的实际应用都可以涵盖起来。而具体到上述几个问题的解决方式,又可以抽象出来几种设计模式。

二、常见的设计模式

1、分治法分治法应该学过算法的都知道,这是一种经典的算法,用来处理复杂的型业务模型。它的本质在于把一个规模为N的问题,分解成K个小的问题,然后把这些同质且相互独立的小问题解决后,通过合并算法来解决规模为N的问题。分治法是一种非常常见的方法,在实际应用中也非常多,比如最常见的二分查找。分治法需要注意的问题是划分K个小问题的边界问题,既要保证工作量的均衡,又要尽量减少小问题之间的回溯引起的串行化问题。2、数据分解模式数据分解在上面就提到了,它就是把需要处理的数据合理的划分成N份,由不同的线程来处理。它和分治的思想的本质是相同的,但应用的角度不同。对数据分解的一个重要的问题,就是要小心伪共享的问题。3、任务分解模式任务分解模式是任务分解的一种实现方式,主要原理就是把相关的任务分解成一个个独立的任务,然后充分利用多CPU来实现任务的并行操作。它的难点在于,一般任务很难做到分解成独立的小任务。而且,小任务在CPU运行之间的负载均衡控制也是一个很重要的问题。4、流水线模式流水线过程其实就是上面的数据流分解的一种实现模式,它模仿着生产上的流水线,把一个任务分解成多个步骤,然后分别用不同的线程来处理,以提高处理速度。它特别适用于生产者缓慢而消费者较快的情况下,比如从IO读取视频流,可以边读边解码边播放,形成一条完整的流水。而不是一次把读和解码以及播放搞在一起。5、任务图模式在上面的任务分解中提到了任务很难分解成完全独立的小任务,那么根据实际情况,就可以把任务的依赖性按情况整理成一个任务图结构(DAG,有向无环图),然后按照相关的算法在CPU间进行任务调度即可。6、动态任务模式动态任务的模式其实和任务图模式是一动一静,在实际情况中,很多任务不是预先就制定好的。可能会有一个算法,会根据具体的任务数量来动态的扩展,比如一个网络数据处理程序,可能会有很多种情况发生,这时候儿,就需要动态的扩展任务。而动态扩展任务,就需要对线程模型和数据处理模型进行合理的设计,从而保证负载均衡的稳定性。

三、总结

方法论是一个很重要的问题,不能从事物的源头掌握事物的普遍规律,就无法正确的展开问题的分析和解决的方法。所以学习计算机技术,同样要学一学哲学。不能够正确的认知计算机理论对解决问题的思路的指导作用,就无法更高效快速的解决遇到的问题。在并行设计上,更是如此。懂代码的人,知道抽象这个方法,但不断的抽象,就会远离实际的应用,导致抽象的理论和具体的实践之间的一种间接的割裂。这也是学习计算机技术的经常遇到的问题,如何更好的把抽象的理论和实际的并行计算互相结合起来,这才是重中之重。

预览时标签不可点收录于话题#个上一篇下一篇

转载请注明:http://www.abachildren.com/jbzs/623.html