zoukankan      html  css  js  c++  java
  • 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)
    }
    

      

  • 相关阅读:
    IOS和Android支持的音频编解码
    IOS XIB Cell自适应高度实现
    IOS竖屏应用单个页面横屏的解决办法
    FMDB读取Datetime类型值为1970的问题
    一些IOS开发中的小技巧
    IOS的一些小技巧
    Static块详解
    Hadoop学习笔记3---安装并运行Hadoop
    Hadoop学习笔记2---配置详解
    同一账户在同一时间 只能登陆一次
  • 原文地址:https://www.cnblogs.com/qstudy/p/10190448.html
Copyright © 2011-2022 走看看