通道用例大全 您所在的位置:网站首页 r语言语法大全 通道用例大全

通道用例大全

2023-04-15 16:05| 来源: 网络整理| 查看: 265

在阅读本文之前,请先阅读通道一文。 那篇文章详细地解释了通道类型和通道值,以及各种通道操作的规则细节。 一个Go新手程序员可能需要反复多次阅读那篇文章和当前这篇文章来精通Go通道编程。

本文余下的内容将展示很多通道用例。希望这篇文章能够说服你接收下面的观点:

使用通道进行异步和并发编程是简单和惬意的; 通道同步技术比被很多其它语言采用的其它同步方案(比如角色模型和async/await模式)有着更多的应用场景和更多的使用变种。

请注意,本文的目的是展示尽量多的通道用例。但是,我们应该知道通道并不是Go支持的唯一同步技术,并且通道并不是在任何情况下都是最佳的同步技术。 请阅读原子操作和其它并发同步技术来了解更多的Go支持的同步技术。

将通道用做future/promise

很多其它流行语言支持future/promise来实现异步(并发)编程。 Future/promise常常用在请求/回应场合。

返回单向接收通道做为函数返回结果

在下面这个例子中,sumSquares函数调用的两个实参请求并发进行。 每个通道读取操作将阻塞到请求返回结果为止。 两个实参总共需要大约3秒钟(而不是6秒钟)准备完毕(以较慢的一个为准)。

package main import ( "time" "math/rand" "fmt" ) func longTimeRequest() 数据聚合/分流; 数据组合/拆分; 数据复制/增殖; 等等。

一个模块中的工作协程从一些其它模块接收数据做为输入,并向另一些模块发送输出数据。 换句话数,一个模块可能同时兼任数据消费者和数据产生者的角色。

多个模块一起组成了一个数据流处理系统。

下面将展示一些模块工作协程的实现。这些实现仅仅是为了解释目的,所以它们都很简单,并且它们可能并不高效。

数据生成/搜集/加载 一个数据产生者可能通过以下途径生成数据: 加载一个文件、或者读取一个数据库、或者用爬虫抓取网页数据; 从一个软件或者硬件系统搜集各种数据; 产生一系列随机数; 等等。

这里,我们使用一个随机数产生器做为一个数据产生者的例子。此数据产生者函数没有输入,只有输出。

import ( "crypto/rand" "encoding/binary" ) func RandomGenerator()


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有