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)
    }
    

      

  • 相关阅读:
    再战CS231-数组的访问
    win10定时关机
    再战CS231-快速排序
    数据库权限
    numpy
    anaconda
    控件的相对位置与绝对位置-UI界面编辑器(SkinStudio)教程
    共用字体-UI界面编辑器(SkinStudio)教程
    添加图片按钮-UI界面编辑器(SkinStudio)教程
    为窗体设置背景图片-UI界面编辑器(SkinStudio)教程
  • 原文地址:https://www.cnblogs.com/qstudy/p/10190448.html
Copyright © 2011-2022 走看看