佛山网站制作,seo教学视频教程,建设企业网站服务器,网络营销电子版教材文章目录 前言代码仓库核心概念main.go#xff08;有详细注释#xff09;结果总结参考资料作者的话 前言
Go并发编程学习的简单代码示例#xff1a;生产者消费者模型。 代码仓库
yezhening/Programming-examples: 编程实例 (github.com)Programming-examples: 编程实例 (g… 文章目录 前言代码仓库核心概念main.go有详细注释结果总结参考资料作者的话 前言
Go并发编程学习的简单代码示例生产者消费者模型。 代码仓库
yezhening/Programming-examples: 编程实例 (github.com)Programming-examples: 编程实例 (gitee.com) 核心概念
并行和并发
并行同时运行多个任务。依赖硬件中央处理器CPU的数量或CPU的核心数量CPU或CPU核心的数量越多能够同时运行的程序/进程越多并发宏观上是“同时运行”微观/实际上是在极短的时间内顺序运行多个程序/进程
进程、线程、协程和Go协程goroutine
进程资源分配的基本单位线程内核态线程 CPU调度的基本单位协程用户态线程轻量级线程一个进程可以有多个线程线程和协程对应关系可以是一对一、一对多和多对多goroutineGo的协程概念使用GGoroutine-PProcessor-MMachine模型
Go的并发编程 使用go关键字开启多协程goroutine而不是多进程和多线程实现并发 使用管道channal而不是锁实现同步互斥和数据通信 可联想进程间通信IPC中的管道pipe()、共享内存等方式 使用select{}语句实现监听输入/输出I/O操作 可联想网络编程中的监听文件描述符select()函数 相比于C、C和其他语言使用Go实现并发编程的逻辑很简单 main.go有详细注释
package main // 一个工程只有一个main包// 导入路径
import fmt // 用于输出// 生产者
// 参数数据管道单向只写标志管道单向只读
func producer(data_channel chan- int, flag_channel -chan bool) {// 循环处理接收到消费者标志后才退出循环和函数data : 0 //生产者生产的数据for {// select{}语句监听输入/输出I/O操作select {case data_channel - data: //有数据写datacase flag : -flag_channel: //有标志读fmt.Println(生产者读标志, flag, 结束生产)return}}
}// 消费者
// 参数数据管道单向只读标志管道单向只写
func consumer(data_channel -chan int, flag_channel chan- bool) {// 约定循环5次后消费者停止消费向生产者发送停止生产标志for i : 0; i 5; i {data : -data_channel //读数据fmt.Println(消费者读数据, data)}flag_channel - true //写标志return
}// 一个工程只有一个main()函数是程序的唯一入口
func main() {data_channel : make(chan int, 0)// 数据管道生产者向消费者传输数据// 传输int类型数据0无缓冲双向flag_channel : make(chan bool, 0)// 标志管道消费者向生产者传输标志消费者不再消费让生产者停止生产// 传输bool类型数据0无缓冲双向go consumer(data_channel, flag_channel) //go关键字开启goroutine处理消费者任务producer(data_channel, flag_channel) // main()中是主goroutine处理生产者任务
} 结果
PS C:\Users\DSHH\Desktop\go_test go run main.go
消费者读数据 0
消费者读数据 1
消费者读数据 2
消费者读数据 3
消费者读数据 4
生产者读标志 true 结束生产
PS C:\Users\DSHH\Desktop\go_test 总结
Go并发编程的学习代码示例生产者消费者模型。 参考资料
20个小时快速入门go语言中_哔哩哔哩_bilibili一文看懂Go语言协程的设计与原理 - 掘金 (juejin.cn) 作者的话
感谢参考资料的作者/博主作者夜悊版权所有转载请注明出处谢谢~如果文章对你有帮助请点个赞或加个粉丝吧你的支持就是作者的动力~文章在描述时有疑惑的地方请留言定会一一耐心讨论、解答文章在认识上有错误的地方, 敬请批评指正望读者们都能有所收获