Skip to Main Content
Go程序设计语言
book

Go程序设计语言

by 艾伦A. A.多诺万, 布莱恩W. 柯尼汉
August 2021
Beginner to intermediate content levelBeginner to intermediate
450 pages
6h 1m
Chinese
Pearson
Content preview from Go程序设计语言

8.5 并行循环

这一节探讨一些通用的并行模式,来并行执行所有的循环迭代。考虑生成一批全尺寸图像的缩略图的问题。gopl.io/ch8/thumbnail包提供ImageFile函数,它可以缩放单个图像。这里不展示它的实现细节,它可以从gopl.io进行下载。

下面的程序在一个图像文件名字列表上进行循环,然后给每一个图像产生一幅缩略图:

很明显,处理文件的顺序没有关系,因为每一个缩放操作和其他的操作独立。像这样由一些完全独立的子问题组成的问题称为高度并行。高度并行的问题是最容易实现并行的,有许多并行机制来实现线性扩展。

并行执行这些操作,忽略文件I/O的延迟和对同一文件使用多个CPU进行图像slice计算。第一个并行版本准备仅仅添加go关键字。现在将忽略错误,后面再处理:

这一版运行真得太快了,事实上,即使在文件名称slice中只有一个元素的情况下,它也比原始版本要快。如果这里没有并行机制,并发的版本怎么可能运行得更快?答案是makeThumbnails2在没有完成想要完成的事情之前就返回了。它启动了所有的goroutine,每个文件一个,但是没有等它们执行完毕。 ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

C++语言导学(原书第2版)

C++语言导学(原书第2版)

本贾尼 斯特劳斯特鲁普
Go语言编程

Go语言编程

威廉·肯尼迪

Publisher Resources

ISBN: 9787111558422