课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
性能优化一直都是程序员需要长期关注的一个问题,而今天我们就通过案例分析来了解一下,并发编程开发对性能优化的影响作用。
多处理器系统已经存在了几十年,但直到近,他们几乎只能在超级计算机、大型机和大型服务器系统中才能看到。然而芯片制造商越来越倾向于多核芯片的设计,即在单个芯片上集成2、4、16或更多的处理器,从而达到比单核心更好的性能。因此,多核台式计算机,甚至多核嵌入式设备,现在越来越普遍。这些计算机的计算能力的提高不是源自使单一任务运行的更快,而是源自并行运行多个任务。在过去,程序员曾坐看他们的程序随着处理器的更新换代而变得更快,无需他们这边做出任何努力。但是现在,就像HerbSutter所说的,“免费的午餐结束了。”如果软件想要利用日益增长的计算能力,它必须设计为并发运行多个任务。程序员因此必须留意,而且那些迄今都忽略并发的人们在必须注意它并将其加入他们的工具箱中。
有两种方式为了性能使用并发。也是明显的,是将一个单个任务分成几部分且各自并行运行,从而降低总运行时间。这就是任务并行(taskparallelism)。虽然这听起来很直观,但它可以是一个相当复杂的过程,因为在各个部分之间可能存在很多的依赖。区别可能是在过程方面——一个线程执行算法的一部分而另一个线程执行算法的另一个部分——或是在数据方面——每个线程在不同的数据部分上执行相同的操作。后一种方法被称为数据并行(dataparallelism)。
容易受这种并行影响的算法常被称为易并行(embarrassinglyparallel)。抛开你可能会尴尬地面对很容易并行化的代码这一含义,这是一件好事情:我曾遇到过的关于此算法的别的术语是自然并行(naturallyparallel)和便利并发(convenientlyconcurrent)。易并行算法具有良好的可扩展特性——随着可用硬件线程数量的提升,算法的并行性可以随之增加与之匹配。这样的一个算法是谚语“人多力量大”的完美体现。对于非易并行算法的那一部分,你可以将算法划分为一个固定(因而不可扩展)数量的并行任务。在线程之间划分任务的技巧涵盖在8章中。
使用并发来提升性能的二种方法是使用可用的并行方式来解决更大的问题;与其同时处理一个文件,不如酌情处理2个或10个或20个。虽然这实际上只是数据并行的一种应用,通过对多组数据同时执行相同的操作,但还是有不同的重点。处理一个数据块仍然需要同样的时间,但在相同的时间内却可以处理更多的数据。当然,这种方法也存在限制,且并非在所有情况下都是有益的,但是这种方法所带来的吞吐量提升可以让一些新玩意变得可能,例如,如果图片的各部分可以并行处理,就能提高视频处理的分辨率。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。