编程:串行与并行
通常说的串行接口和并行接口是指:PC计算机与外部设备连接的接口,指代的是数据传输的机制
在计算机计算角度:指代计算机指令的执行方式
串行:就是数据或者指令一个个操作
并行:就是数据或者指令按一定长度的同时操作
从原理角度并行的速度要比串行高,但在数据传输层面,因传输的信号干扰,目前PC环境基本为串行传输,当然也不止这一个原因,如IDE线的主从问题,数据线的长度和宽度问题
在计算角度:
- 串行计算基本都是使用冯诺依曼计算模型(基本结构特征是“共享数据和串行执行”的计算机模型。按照这种结构,程序和数据放在共享存储器内,CPU取出指令和数据进行相应的计算);
- 并行是人们不满足于CPU摩尔定率(摩尔定律是由英特尔(Intel)创始人之一戈登·摩尔(Gordon Moore)提出来的。其内容为:当价格不变时,积体电路(IC)上可容纳的电晶体数目,约每隔24个月(1975年摩尔将24个月更改为18个月)便会增加一倍,性能也将提升一倍;或者说,每一美元所能买到的电脑性能,将每隔18个月翻两倍以上。这一定律揭示了信息技术进步的速度。)的增长速度,希望把多个计算机并联起来,从而获得更快的计算速度。这里的多个计算机可以换成多核CPU。
并行计算是相对于串行计算来说的,所谓并行计算分为时间上的并行和空间上的并行。 时间上的并行就是指流水线技术,而空间上的并行则是指用多个处理器并发的执行计算。
流水线技术通常指带CPU上的技术,是CPU指令操作上的优化 。目前的研究主要在于空间上的并行。
为了利用或者更快速的提高计算机的计算能力,发展出了多核CPU,但完全利用多核CPU的性能需要并行计算模型及并行算法。云计算就是在并行计算的基础上建立的完整的体系结构。(云计算的目标与并行计算的目标不同,云计算在于用廉价的计算机动态的扩展存储及性能,但并行计算是针对专业领域的高性能扩展)
并行计算又可分为数据并行和任务并行。一般来说,因为数据并行主要是将一个大任务化解成相同的各个子任务,比任务并行要容易处理。
- 并发是一定程度上的并行计算,是通过将不同的任务启用不同的线程,通过操作系统的指令优化,实现并行计算的性能,能充分的利用多核处理器的计算能力。适用于处理简单的任务方式。页面访问就是一种简单化的任务,通常考量WEB服务器的性能都通过参考并发数决定的。
- 分布式中以提高性能为目的的分布式算法,也能算并行计算,是通过对事物模型的分层处理,用任务分发的方式实现并行计算,能充分利用多台服务器的性能。
但以上2点都能算是空间上的并行,并且是数据并行。函数式编程在语言层面实现了数据并行的操作方式。
任务并行需要计算模型和并行算法。
计算模型:Hadoop中实现了Google发布的MapReduce的分布式并行计算模型,通过对任务的分割,实现任务的空间并行,在开发过程中只需关注并行任务的实现(任务的最小化实现),不用考虑任务间通信、任务调度、容错等编程复杂度
在统计数据过程中,按日统计数据,统计10天,由计算模型根据对应的计算机资源分割任务
并行算法:串行算法直接并行化,通过对原先的串行算法分析识别出可独立运行的部分,并预估每部分的计算量从而合理的把任务分配到多个处理器上(多台机器)。
函数式编程在一定层面实现了串行算法并行化的指令优化。