GO并发编程综合应用

一.GO并发编程综合应用

1.生产者消费者模式
1.1需求分析

​ 生产者每秒生产一个商品,并通过物流公司取货

​ 物流公司将商品运输到商铺

​ 消费者阻塞等待商铺到货,需要消费10次商品

1.2实现原理

在这里插入图片描述

1.3代码实现:
package mainimport ("fmt""strconv""time"
)func main() {storageChan := make(chan Product, 10)shopChan := make(chan Product, 10)exitChan := make(chan bool, 1)for i := 1; i < 9; i++ {go Producer(storageChan, 10)}go Logistics(storageChan, shopChan)go Consumer(shopChan, 10, exitChan)if <-exitChan {return}
}// Product 商品
type Product struct {Name string
}// Producer 生产者
func Producer(storageChan chan<- Product, count int) {for {producer := Product{"商品:" + strconv.Itoa(count)}storageChan <- producercount--time.Sleep(time.Second)fmt.Println("生产了", producer)if count < 1 {return}}
}// Logistics 物流公司
func Logistics(storageChan <-chan Product, shopChan chan<- Product) {for {product := <-storageChanshopChan <- productfmt.Println("运输了", product)}
}// Consumer 消费者
func Consumer(shopChan <-chan Product, count int, exitChan chan<- bool) {for {product := <-shopChanfmt.Println("消费了", product)count--if count < 1 {exitChan <- truereturn}}
}
2.协程管道定时任务的应用
2.1需求分析

​ 1.定时执行某个任务,类似延时消息队列

​ 2.或者周期性的执行某个任务,类似定期同步某些数据

2.2实现原理

在这里插入图片描述

2.3代码实现:
package mainimport ("fmt""time"
)func main() {//方式1:fmt.Println("当前时间:", time.Now())//timer := time.NewTimer(time.Second * 3)//t := <-timer.C //timer.C一个只读的管道//fmt.Println(t)//方式二:t := <-time.After(time.Second * 3) //源码可见,实际上NewTimer(d).Cfmt.Println(t)
}
3.定时器的终止与重置

​ NewTimer, Stop, Reset

package mainimport ("fmt""math/rand""time"
)var flag bool = isStopTimer()func main() {//方式1:fmt.Println("当前时间:", time.Now())timer := time.NewTimer(time.Second * 3)if flag {timer.Stop() //如果停止了timer,还去拿fatal error: all goroutines are asleep - deadlock!} else {t := <-timer.C //timer.C一个只读的管道fmt.Println(t)}}func isStopTimer() bool {rand.Seed(time.Now().UnixNano())tempInt := rand.Intn(2) + 18if tempInt >= 18 {fmt.Println("已经找到了大于18,结束timer")return true} else {return false}
}func isResetTimer() int {rand.Seed(time.Now().UnixNano())tempInt := rand.Intn(4) + 19fmt.Println("已经找到",tempInt)return tempInt-18
}
4.需要每隔时间触发任务
4.1实现原理:

在这里插入图片描述

4.2代码实现
package mainimport ("fmt""time"
)func main() {var count int = 0ticker := time.NewTimer(time.Second * 1)go func() {for {t := <-ticker.Cfmt.Println("时间:", t.Format("2006-01-02 03:04:05PM"))count++if count > 2 {ticker.Stop()}}}()time.Sleep(time.Second * 10)fmt.Println("游戏结束")
}
4.3改造成任务队列
package mainimport ("fmt""sync""time"
)func main() {var count int = 0var wg sync.WaitGroupwg.Add(1)ticker := time.NewTicker(time.Second * 1)go func() {defer wg.Done()defer ticker.Stop()for {t := <-ticker.Cfmt.Println("时间:", t.Format("2006-01-02 03:04:05PM"))count++if count > 2 {return}}}()wg.Wait()fmt.Println("游戏结束")
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/217447.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity Mono加密解决方案

Unity Mono 是 Unity 引擎默认的脚本运行时环境&#xff0c;在游戏开发中扮演着重要的角色。Mono 由跨平台的开源 .NET 框架实现&#xff0c;它允许开发者使用 C# 等编程语言编写游戏逻辑。凭借简单易用的开发环境和高效的脚本编译速度&#xff0c;得到了众多游戏的青睐。 在 …

基于亚马逊云科技新功能:Amazon SageMaker Canvas无代码机器学习—以构建货物的交付状态检测模型实战为例深度剖析以突显其特性

授权说明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在亚马逊云科技开发者社区、 知乎、自媒体平台、第三方开发者媒体等亚马逊云科技官方渠道。 目录 &#x1f680;一. Amazon SageMaker &#x1f50e;1.1 新功能发布&#xff1a;A…

【通俗易懂】基于fabric8io操作k8s集群实战(pod、deployment、service、volume)

目录 前言一、基于fabric8io操作pod1.1 yaml创建pod1.2 fabric8io创建pod案例 二、基于fabric8io创建Service&#xff08;含Deployment&#xff09;2.1 yaml创建Service和Deployment2.2 fabric8io创建service案例 三、基于fabric8io操作Volume3.1 yaml配置挂载存储卷3.2 基于fa…

国际语音群呼系统有哪些应用场景?

国际语音群呼可应用于广告营销、消息通知、客情维护、金融催收等场景&#xff0c;助力出海企业产品营销和品牌推广。 广告营销 出海企业可以通过国际语音群呼系统&#xff0c;向目标市场的潜在客户进行广告宣传。例如&#xff0c;企业可以在系统中录制有关产品的宣传语&#…

分布式块存储 ZBS 的自主研发之旅|元数据管理

重点内容 元数据管理十分重要&#xff0c;犹如整个存储系统的“大黄页”&#xff0c;如果元数据操作出现性能瓶颈&#xff0c;将严重影响存储系统的整体性能。如何提升元数据处理速度与高可用是元数据管理的挑战之一。SmartX 分布式存储 ZBS 采用 Log Replication 的机制&…

InsCode实践分享

官方文档 官方文档永远是除了源码之外的最准确的资料&#xff0c;可以先看一遍&#xff0c;10分钟可以看完入门部分 InsCode 简介 | InsCode 文档 是什么 InsCode是一个在线的编程工具&#xff0c;提供了创建、调试、共享、部署项目的功能。可以说&#xff1a; InsCodeVSC…

Gitlab基础篇: Gitlab docker 安装部署、Gitlab 设置账号密码

文章目录 1、环境准备2、配置1)、初始化2)、修改gitlab配置文件3)、修改docker配置的gitlab默认端口 gitlab进阶配置gitlab 设置账号密码 1、环境准备 安装docker gitlab前确保docker环境&#xff0c;如果没有搭建docker请查阅“Linux docker 安装文档” docker 下载 gitlab容…

LabVIEW在高铁温度与振动监测中的应用

​LabVIEW在高铁温度与振动监测中的应用 高速铁路的可靠性和安全性是现代铁路运输系统设计和运营的重中之重。LabVIEW软件作为一个多功能、可扩展的图形编程环境&#xff0c;提供了一个理想的平台&#xff0c;用于开发高铁监测系统&#xff0c;不仅监测实时数据&#xff0c;也…

vue 中国省市区级联数据 三级联动

vue 中国省市区级联数据 三级联动 安装插件 npm install element-china-area-data5.0.2 -S 当前版本以测试&#xff0c;可用。组件中使用了 element-ui, https://element.eleme.cn/#/zh-CN/component/installation 库 请注意安装。插件文档 https://www.npmjs.com/package/ele…

Hudi 在 vivo 湖仓一体的落地实践

作者&#xff1a;vivo 互联网大数据团队 - Xu Yu 在增效降本的大背景下&#xff0c;vivo大数据基础团队引入Hudi组件为公司业务部门湖仓加速的场景进行赋能。主要应用在流批同源、实时链路优化及宽表拼接等业务场景。 一、Hudi 基础能力及相关概念介绍 1.1 流批同源能力 与H…

Yum仓库架构解析与搭建实践

1.Yum仓库搭建 1.1本地Yum仓库图解 1.2Linux本地仓库搭建 配置本地光盘镜像仓库 1&#xff09;挂载 [roothadoop101 ~]# mount -t iso996 /dev/cdrom/mnt 2&#xff09;查看 [rooothadoop101 ~] # df -h | |grep -i mnt /dev/sr0 4.6G 4.4G 3&#xf…

python学习1

大家好&#xff0c;这里是七七&#xff0c;今天开始又新开一个专栏&#xff0c;Python学习。这次思考了些许&#xff0c;准备用例子来学习&#xff0c;而不是只通过一大堆道理和书本来学习了。啊对&#xff0c;这次是从0开始学习&#xff0c;因此大佬不用看本文了&#xff0c;小…

103基于matlab的极限学习机(ELM)和改进的YELM和集成极限学习机(EELM)是现在流行的超强学习机

基于matlab的极限学习机&#xff08;ELM&#xff09;和改进的YELM和集成极限学习机(EELM)是现在流行的超强学习机&#xff0c;该程序是三者的方法比对。 包括学习时间&#xff0c;训练精度和测试精度的对比。数据可更换自己 的&#xff0c;程序已调通&#xff0c;可直接运行…

Nginx+Tomcat实现负载均衡和动静分离

目录 前瞻 动静分离和负载均衡原理 实现方法 实验&#xff08;七层代理&#xff09; 部署Nginx负载均衡服务器(192.168.75.50:80) 部署第一台Tomcat应用服务器&#xff08;192.168.75.60:8080&#xff09; 多实例部署第二台Tomcat应用服务器&#xff08;192.168.75.70:80…

Django和ECharts异步请求示例

前提条件 创建django项目&#xff0c;安装配置过程这里就不讲述了。 后端url http://127.0.0.1:8000/echarts/demo/ view视图函数 from django.http import HttpResponse import jsondef EchartsDemo(request):data {}categories ["衬衫","羊毛衫",&…

初识数据结构

文章目录 一、什么是数据结构&#xff1f;二、什么是算法&#xff1f;三、数据结构和算法的重要性在校园招聘的笔试中在校园招聘的面试中某学长CVTE面试&#xff1a;某学长腾讯的面试&#xff1a;某学姐百度的面试&#xff1a; 在未来的工作中 四、如何学好数据结构和算法1.死磕…

亚马逊云科技 re:Invent 大会 - ElastiCache Serverless模式来袭

亚马逊云科技 re:Invent 大会 - ElastiCache Serverless模式来袭 本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道。 文章目录 亚马逊云…

JAVA:深入探讨Map的多种遍历方式

1、简述 在现代编程中&#xff0c;Map&#xff08;映射&#xff09;是一种常见的数据结构&#xff0c;用于存储键-值对。在许多编程语言中&#xff0c;Map提供了灵活的数据组织方式&#xff0c;但为了充分发挥其功能&#xff0c;我们需要了解多种遍历方式。本文将深入探讨Map的…

在接口实现类中,加不加@Override的区别

最近的软件构造实验经常需要设计接口&#xff0c;我们知道Override注解是告诉编译器&#xff0c;下面的方法是重写父类的方法&#xff0c;那么单纯实现接口的方法需不需要加Override呢&#xff1f; 定义一个类实现接口&#xff0c;使用idea时&#xff0c;声明implements之后会…

【普中】基于51单片机简易计算器显示设计( proteus仿真+程序+设计报告+实物演示+讲解视频)

目录标题 &#x1f4df;1. 主要功能&#xff1a;&#x1f4df;2. 讲解视频&#xff1a;&#x1f4df;3. 设计说明书(报告)&#x1f4df;4. 仿真&#x1f4df;5. 实物烧录和现象&#x1f4df;6. 程序代码&#x1f4df;7. 设计资料内容清单 【普中开发板】基于51单片机简易计算器…