首页 > 其他分享 >生产消费模型-使用channel控制生产速度

生产消费模型-使用channel控制生产速度

时间:2023-08-01 10:45:37浏览次数:31  
标签:WaitGroup Producer int 模型 sync 生产 channel

package main

import (
    "fmt"
    "sync"
)

type Producer struct {
    ID         int
    DataStream chan int
    WaitGroup  *sync.WaitGroup
}

func (p *Producer) Produce(concurrency <-chan struct{}) {
    defer p.WaitGroup.Done()
    for i := 0; i < 10; i++ {
        <-concurrency // 允许堆积的计数-1
        p.DataStream <- i
        fmt.Printf("Producer %d produced data: %d\n", p.ID, i)
    }//生产结束要关闭DataStream,否则consumer会一直阻塞
    close(p.DataStream)
}

type Consumer struct {
    ID         int
    DataStream chan int
    WaitGroup  *sync.WaitGroup
}

func (c *Consumer) Consume(concurrency chan<- struct{}) {
    defer c.WaitGroup.Done()
    for data := range c.DataStream {
        fmt.Printf("Consumer %d consumed data: %d\n", c.ID, data)
        concurrency <- struct{}{} // 允许堆积的计数+1
    }
}

func main() {
    //保存消费数据的chan
    dataStream := make(chan int, 10)
    //控制生产速度的chan
    concurrency := make(chan struct{}, 5) // 设置生产者允许堆积的最大消息数
    for i := 0; i < 5; i++ {
        concurrency <- struct{}{}
    }

    var wg sync.WaitGroup
    producer := &Producer{
        ID:         1,
        DataStream: dataStream,
        WaitGroup:  &wg,
    }

    consumer := &Consumer{
        ID:         1,
        DataStream: dataStream,
        WaitGroup:  &wg,
    }

    wg.Add(2)
    go producer.Produce(concurrency)
    go consumer.Consume(concurrency)

    wg.Wait()
    close(concurrency) // 关闭并发信号通道
}

 

标签:WaitGroup,Producer,int,模型,sync,生产,channel
From: https://www.cnblogs.com/-citywall123/p/17595834.html

相关文章

  • 什么是思维模型?
    如果您来回答「什么是思维模型」这个问题,会如何思考?我们来做个假设:假设有两个人同时被要求在半天内回答「什么是思维模型」的问题,A没有思维模型,B有思维模型,他们的思考路径如何呢?没有思维模型假设我没有思维模型,我会:先去百度搜索「什么是思维模型」。根据百度提供的链接,我......
  • 格律诗乐器的生产流程和质量控制流程
      格律诗乐器作为一种结合了格律诗和乐器的艺术品,在音乐界备受关注。本文以电视剧《天道》中演员王志文饰演的格律诗乐器制作师为例,详细探讨了格律诗乐器的生产和质量控制流程。通过设计、制作和质量控制等环节,每一件格律诗乐器都能达到音质和外观品质的最佳状态。这篇论文将为......
  • 基于形态学处理和颜色模型的车辆跟踪和车辆颜色识别matlab仿真
    1.算法理论概述       车辆跟踪和车辆颜色识别是计算机视觉领域中的一个重要研究方向,其目的是实现对道路交通中车辆的自动识别和跟踪。本文将详细介绍基于形态学处理和颜色模型的车辆跟踪和车辆颜色识别的实现步骤和数学公式。 1.1数据预处理       在进行......
  • 中文多模态医学大模型智能分析X光片,实现影像诊断,完成医生问诊多轮对话
    中文多模态医学大模型智能分析X光片,实现影像诊断,完成医生问诊多轮对话1.背景介绍介绍最近,通用领域的大语言模型(LLM),例如ChatGPT,在遵循指令和产生类似人类响应方面取得了显著的成功,这种成功间接促进了多模态大模型的研究和发展,如通用领域的多模态大模型MiniGPT-4、mPLUG-Owl、......
  • boost asio多线程模型-IOServicePool
    前面的设计,我们对asio的使用都是单线程模式,为了提升网络io并发处理的效率,这一次我们设计多线程模式下asio的使用方式。总体来说asio有两个多线程模型,第一个是启动多个线程,每个线程管理一个iocontext。第二种是只启动一个iocontext,被多个线程共享,后面的文章会对比两个模式的区别,这......
  • R语言分布滞后线性和非线性模型(DLM和DLNM)建模|附代码数据
    全文下载链接:http://tecdat.cn/?p=18700最近我们被客户要求撰写关于DLM和DLNM的研究报告,包括一些图形和统计输出。本文说明了R语言中实现分布滞后线性和非线性模型(DLM和DLNM)的建模。首先,本文描述了除时间序列数据之外的DLM/DLNM的一般化方法,在Gasparrini[2014]中有更详细的描......
  • ChatGPT 已经迎来辉煌了吗?了解人工智能语言模型的演变
    在快速发展的人工智能领域,语言模型一直是许多进步的先锋。其中,由OpenAI开发的ChatGPT的自然语言处理能力引起了极大的兴趣。然而,随着更先进的人工智能语言模型的开发,许多专家和爱好者开始怀疑ChatGPT是否已经充分发挥了其潜力。在本文中,我们将讨论AI语言模型的开发,调查ChatGPT......
  • ACM图灵大会开幕,王海峰解读文心大模型3.5最新进展
    7月28日-30日,顶级学术会议ACM中国图灵大会在武汉举办,围绕“通用智能,人机共生”主题,图灵奖得主、中国科学院院士、企业代表等与会探讨尖端技术及人工智能发展,展望计算科学未来。百度首席技术官、深度学习技术及应用国家工程研究中心主任王海峰解读文心大模型的核心技术,阐述人工智能......
  • 机器学习从入门到放弃:Transfomer-现代大模型的基石
    一、前言随着ChatGPT的横空出世,全世界的目光都聚焦在了生成式AI上。本次将介绍Transformer的发展历史、基本原理,也是记录总结自己在学习路上的所得。首先我想聊聊NLP的发展路线,这样对于后面的transformer可能会有更好的理解。自从计算机诞生之初,让计算机理......
  • RT-DETR:可以满足实时性要求的DETR模型
    本文分享自华为云社区《高性能网络设计秘笈:深入剖析Linux网络IO与epoll》,作者:LionLong。一、epoll简介epoll是Linux内核中一种可扩展的IO事件处理机制,可替代select和poll的系统调用。处理百万级并发访问性能更佳。二、select的局限性(1) 文件描述符越多,性能越差。 单个进程......