Go程序设计语言1.6 并发获取多个URL-阿里云开发者社区

开发者社区> 华章计算机> 正文

Go程序设计语言1.6 并发获取多个URL

简介:
+关注继续查看

1.6 并发获取多个URL


Go最令人感兴趣和新颖的特点是支持并发编程。这是一个大话题,第8章和第9章将专门讨论,所以此处只是简单了解一下Go主要的并发机制、goroutine和通道(channel)。

下一个程序fetchall和前一个一样获取URL的内容,但是它并发获取很多URL内容,于是这个进程使用的时间不超过耗时最长时间的获取任务,而不是所有获取任务总的时间。这个版本的fetchall丢弃响应的内容,但是报告每一个响应的大小和花费的时间:

 

 

这有一个例子:

 

 

goroutine是一个并发执行的函数。通道是一种允许某一例程向另一个例程传递指定类型的值的通信机制。main函数在一个goroutine中执行,然后go语句创建额外的goroutine。

main函数使用make创建一个字符串通道。对于每个命令行参数,go语句在第一轮循环中启动一个新的goroutine,它异步调用fetch来使用http.Get获取URL内容。io.Copy函数读取响应的内容,然后通过写入ioutil.Discard输出流进行丢弃。Copy返回字节数以及出现的任何错误。每一个结果返回时,fetch发送一行汇总信息到通道ch。main中的第二轮循环接收并且输出那些汇总行。

当一个goroutine试图在一个通道上进行发送或接收操作时,它会阻塞,直到另一个goroutine试图进行接收或发送操作才传递值,并开始处理两个goroutine。本例中,每一个fetch在通道ch上发送一个值(ch <- expression),main函数接收它们(<-ch)。由main来处理所有的输出确保了每个goroutine作为一个整体单元处理,这样就避免了两个goroutine同时完成造成输出交织所带来的风险。

练习1.10:找一个产生大量数据的网站。连续两次运行fetchall,看报告的时间是否会有大的变化,调查缓存情况。每一次获取的内容一样吗?修改fetchall将内容输出到文件,这样可以检查它是否一致。

练习1.11:使用更长的参数列表来尝试fetchall,例如使用alexa.com排名前100万的网站。如果一个网站没有响应,程序的行为是怎样的?(8.9节会通过复制这个例子来描述响应的机制。)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
40多个关于人脸检测/识别的API、库和软件
【感谢@吕抒真 的热心翻译。如果其他朋友也有不错的原创或译文,可以尝试推荐给伯乐在线。】   自从谷歌眼镜被推出以来,围绕人脸识别,出现了很多争议。我们相信,不管是不是通过智能眼镜,人脸识别将在人与人交往甚至人与物交互中开辟无数种可能性。
1987 0
二十个一乘以二十个二等于多少?C语言经典算法设计之大数乘法
二十个一乘以二十个二等于多少?C语言经典算法设计之大数乘法
1415 0
多语言GUI设计
多语言GUI设计 SDK只提供了英文界面的参考,这肯定是不适合逐渐国际化的市场需求,因此我们进行软件功能设计的很重要的一个任务是开发PMP多国语言显示界面,方便各个地区的用户以母语界面对PMP进行操作。
917 0
jQuery 获取URL的GET参数值
// * jQuery url get parameters function [获取URL的GET参数值] // *character_set UTF-8 // * author Jerry.
680 0
浙江乌镇已布500多个人脸识别摄像头;宁波、嘉兴将引入中考英语人机对话考试技术,用机器为考生口语评分
在杭州白马湖国际会议中心A馆,阿里巴巴旗下本地生活服务平台“口碑”用一张普通的二维码,希望把传统便利店打造出Amazon Go的体验感:不用排队结账,即扫即得。
1119 0
《C语言及程序设计》实践参考——消除多余的空格
返回:贺老师课程教学链接  项目要求 【项目3:消除多余的空格】从键盘上的输入一句话,直到按回车键为止,这些字符被原样输出,但若有连续的一个以上的空格时只输出一个空格。例如,输入:I   am     a            teacher.,输出I am a teacher. [参考解答]#include &lt;stdio.h&gt; int main( ) { char c
922 0
10059
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新