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

      

  • 相关阅读:
    由于媒体16摘要天
    vim note (2)
    JEECG 什么是商业版本的功能最近添加的好友?
    图解linux启动过程
    Error: unrecognized flag -version
    基于RDP瘦客户机协议的简要说明
    Android在网络上分析获取图片(支持bmp格式)
    [React] Validate Custom React Component Props with PropTypes
    [Python] Wikipedia Crawler
    [Python] Python list slice syntax fun
  • 原文地址:https://www.cnblogs.com/qstudy/p/10190448.html
Copyright © 2011-2022 走看看