go语言实现生产者-消费者
前言:
之前在学习操作系统的时候,就知道生产者-消费者,但是概念是模模糊糊的,好像是一直没搞明白。
其实很简单嘛,生产者生产,消费者进行消费,就是如此简单。了解了一下go语言的goroute,感觉实现并发原来可以如此简单,不像之前Java,什么还需要什么线程池啥的。
1、其实可以在一个go文件中可以实现的,按照go语言的开发习惯,按照标准的,定义三个包producer,consumer,main
2、producer.go
生产者每一秒产生一个header,一个随机数,并将它输出到管道pipe中。
package producer import (
"fmt"
"math/rand"
"time"
)
func Produce(header string,pipe chan string ){
for{
pipe <- fmt.Sprintf("%s: %v",header,rand.Int31())
time.Sleep(time.Second)
} }
3、consumer.go
消费者从管道拿到数据,并进行输出。
package consumer
import("fmt")
func Consume(pipe chan string){
for{
message := <- pipe
fmt.Println(message)
}
}
4、main.go
a、main是可执行的入口,并且得有个main函数,make用于定义一个管道,供生产者写入,消费者读数据
b、在这么简答的例子中,我们用到了go得并发特性,go是关键字,用于启动一个goroute,下面的main函数中,启动了两个producer的goroute生产数据,consumer利用main函数的goroute进行消费,在main开始执行后,他们是并发执行的。
package main import(
"consumer"
“producer"
) func main(){
channel := make(chan string)
go producer.Produce("dog",channel)
go producer.Produce("cat",channel)
consumer.Consume(channel)
}
go语言实现生产者-消费者的更多相关文章
- go语言实现"生产者"和"消费者"的例子
学习java的多线程的时候最经典的一个例子就是生产者消费者模型的例子,最近在研究go语言协程,发现go提供的sync包中有很多和java类似的锁工具,尝试着用锁工具配合协程实现一个"消费者& ...
- 生产者消费者问题c语言实现
#include <stdio.h> #include <process.h> #include <Windows.h> //信号量与关键段 CRITICAL_SE ...
- Go语言协程并发---生产者消费者实例
package main import ( "fmt" "strconv" "time" ) /* 改进生产者消费者模型 ·生产者每秒生产一 ...
- LabVIEW之生产者/消费者模式--队列操作 彭会锋
LabVIEW之生产者/消费者模式--队列操作 彭会锋 本文章主要是对学习LabVIEW之生产者/消费者模式的学习笔记,其中涉及到同步控制技术-队列.事件.状态机.生产者-消费者模式,这几种技术在在本 ...
- java 生产者消费者问题 并发问题的解决
引言 生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,如下图所示,生产者向空间里存放数据,而消费者取用数据,如果不加以协调可能会出现以下情况: 生产者消费者图 ...
- 通过生产者消费者模式例子讲解Java基类方法wait、notify、notifyAll
wait(),notify()和notifyAll()都是Java基类java.lang.Object的方法. 通俗解释wait():在当前线程等待其它线程唤醒.notify(): 唤醒一个线程正在等 ...
- 生产者/消费者问题的多种Java实现方式--转
实质上,很多后台服务程序并发控制的基本原理都可以归纳为生产者/消费者模式,而这是恰恰是在本科操作系统课堂上老师反复讲解,而我们却视而不见不以为然的.在博文<一种面向作业流(工作流)的轻量级可复用 ...
- Java实现生产者消费者问题与读者写者问题
摘要: Java实现生产者消费者问题与读者写者问题 1.生产者消费者问题 生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从 ...
- java 生产者消费者问题 并发问题的解决(转)
引言 生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,如下图所示,生产者向空间里存放数据,而消费者取用数据,如果不加以协调可能会出现以下情况: 生产者消费者图 ...
随机推荐
- windows 分页缓冲池 非分页缓冲池
最近在windows server 2012机器上在做性能测试时,发现8G物理内存,内存使用率占到了90%多,在“进程”列表中所有进程内存相加才2个多G,同时任务管理器->“性能”标签一项中,非 ...
- 【zabbix教程系列】七、自动注册(Windows)
零.页面操作,设置自动注册Windows 配置--->动作--->事件源选为自动注册---->创建动作 填写名称,配置触发条件 主机元数据 值为 Windows 操作 一.Win ...
- POJ1847 Tram
Tram Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 20274 Accepted: 7553 Description ...
- think
https://github.com/crossoverJie/Java-Interview Java-Interview https://github.com/aalansehaiyang/tech ...
- AVIER Racing Drone App Privacy Policy
Personal Data collected for the following purposes and using the following services: Device permissi ...
- MATLAB模型预测控制(MPC,Model Predictive Control)
模型预测控制是一种基于模型的闭环优化控制策略. 预测控制算法的三要素:内部(预测)模型.参考轨迹.控制算法.现在一般则更清楚地表述为内部(预测)模型.滚动优化.反馈控制. 大量的预测控制权威性文献都无 ...
- 在graphviz中创建可点击的图形
1.创建一个dot文件,在节点属性中使用URL关键字: target关键字指定链接打开的方式 //test.dot digraph Arch { A; B [URL="http://docs ...
- atool-build 打包项目报JavaScript heap out of memory 错误
出现这个问题的原因,是因为NodeJS给JavaScript设置了默认内存使用限制(32位系统下0.7GB,64位系统下1.4GB),就算我们的电脑内存是64GB的,在使用atool-build打包时 ...
- Exp5 MSF基础应用
一.实践内容 1.主动攻击实践 [1]MS08-067 MS08-067 漏洞是2008 年年底爆出的一个特大漏洞,存在于当时的所有微软系统,杀伤力超强.其原理是攻击者利用受害主机默认开放的SMB 服 ...
- MySQL实战45讲学习笔记:索引(第四讲)
一.索引模型 1.索引的作用: 索引的出现其实是为了提高数据查询的效率,就像书的目录一样 提高数据查询效率 2.索引模型的优缺点比较 二.InnoDB索引模型 1.二叉树是搜索效率最高的,但是实际上大 ...