首页
学习
活动
专区
工具
TVP
发布

GO 语言学习笔记(四)

并行能力是GO语言的一大强项,甚至我个人认为并行能力是GO最重要的竞争力,没有之一。启动一个并行任务启动一个并行任务在GO语言里简单到了不能再简单的程度,只需要关键词加上需要在并行线程中启动的函数就可以了。例如:这段代码在主程序中启动两个并行任务,分别打印和两个字符串五次,由于是并行启动的,所以打印出来的顺序每一次运行都不同。Tip: 调用模块的睡眠函数,参数需要明确的写成“数量*单位”的模式,这样就可以非常明确的指出睡眠的时间,避免了、等语言中、、调用乱七八糟的问题,更别提Windows上面的坑爹的函数了。通道GO语言中设计的这个通道简直是并行同步的神奇。首先,就如它的名字那样,通道可以实现数据在不同并行任务中的传递,例如:从这个例子可以看出,由于通过通道获取数据的时候,要等待其他并行任务向通道放入数据,因此,通道在这里实际上还承担了的功能。同样的功能,如果使用实现,需要至少定义一个存储结果的变量和一个用于保护这个变量的互斥量,同时还需要在主函数中调用函数等待子线程结束。不止于此,通道同时还可以当作缓冲区使用,例如:从这个例子里,我仿佛看到了通道在网络通信中的逆天使用:

使用通道定义缓冲区

在网络接收的并行任务中,将接收到的数据包塞入通道

在协议解析任务中,从通道中获取数据包,直到通道关闭

下面就是我设想的伪代码:GO语言异常简洁的并行运行指令加上强大的通道,让它并行处理能力卓尔不群。互斥量当然,只有通道对于并行任务之间的数据保护仍然是不够的,GO语言同样给出了互斥量。互斥量的使用和其他语言没有什么不同,也是和函数的配对使用,唯一不同的是可以利用GO语言的语句,在调用函数之后就可以写下函数,例如:例子:网络爬虫下面是我在最后的网络爬虫任务中作出的答案,因为是练习并行处理,所以尽可能将、通道和互斥量都用了起来,实现了功能,但并不是最优的实现方式:到此,我就完成了全部的内容,后面打算转到进行学习,并且思考如何使用GO语言设计和实现微服务架构。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180806G1XD7900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券