• golang简单的消费者生产者模型


    code

    package main
    
    import (
        "fmt"
        "strconv"
        "time"
    )
    
    // 生产者消费者模型
    // 添加短信发送任务 - 生产者
    // 发送短信 - 消费者
    // 消息有1w条 - 发送脚本
    // 假定发送一个消息需要1s
    // 这里发送脚本任务数量就是协程数|假设有10个协程那么需要1ks100个协程那么需要100s
    
    // 生产者: 添加短信发送任务
    func Producer(msg string, msgList chan<- string) {
        msgList <- msg
    }
    
    // 消费者:发送消息 - 从消息池里面拿出任务发送消息
    func Consumer(msgList <-chan string,n string) {
        for {
            // 阻塞不让子协程退出-并不断监听消息池
            select{
            case msg := <- msgList:
                sendMsg(n+" == "+msg)
            }
        }
    }
    
    // 发送消息动作
    func sendMsg(msg string){
        time.Sleep(time.Second*1)
        fmt.Println(msg)
    }
    
    
    func main() {
    
        // 消费者
        msgList := make(chan string,100) // 创建一个双向channel
        
        // 3个协程消费-3个并行
        go Consumer(msgList,"A")
        go Consumer(msgList,"B")
        go Consumer(msgList,"C")
    
        // 创建10w个消息发送任务 
        c := 10
        for i := 0; i < c; i++ {
            for {
                if len(msgList) < 100 {
                    Producer(strconv.Itoa(i), msgList)
                    break
                }
            }
        }
        
        // 阻塞主协程s
        select{}
    }

    生产者-消费者 

    并行3个协程消费短信发送任务

    I can see a bigger world.
  • 相关阅读:
    SqlHelper
    asp.net中窗口相关操作总结(javascript)
    ASP.NET顯示對話框
    为ASP.NET控件添加常用的JavaScript操作
    右键弹出菜单
    log4net的初使用
    QQ/MSN右下角弹出提示窗口
    简便无刷新文件上传系统
    简单的自动更新程序实
    SQL中的单记录函数
  • 原文地址:https://www.cnblogs.com/xuweiqiang/p/15432977.html
Copyright © 2020-2023  润新知