1. 程式人生 > 其它 >golang簡單的消費者生產者模型

golang簡單的消費者生產者模型

code

package main

import (
    "fmt"
    "strconv"
    "time"
)

// 生產者消費者模型
// 新增簡訊傳送任務 - 生產者
// 傳送簡訊 - 消費者
// 訊息有1w條 - 傳送指令碼
// 假定傳送一個訊息需要1s
// 這裡傳送指令碼任務數量就是協程數|假設有10個協程那麼需要1ks\100個協程那麼需要100s

// 生產者: 新增簡訊傳送任務
func Producer(msg string, msgList chan<- string) {
    msgList <- msg
}

// 消費者:傳送訊息 - 從訊息池裡面拿出任務傳送訊息
func Consumer(msgList <-chan string,n string) { for { // 阻塞不讓子協程退出-並不斷監聽訊息池 select{ case msg := <- msgList: go sendMsg(n+" == "+msg) } } } // 傳送訊息動作 func sendMsg(msg string){ time.Sleep(time.Second*1) fmt.Println(msg) } func main() {
// 消費者 msgList := make(chan string,100000) // 建立一個雙向channel // 3個協程消費 go Consumer(msgList,"1") go Consumer(msgList,"2") go Consumer(msgList,"3") // 建立1w個訊息傳送任務 for i := 0; i < 100; i++ { Producer(strconv.Itoa(i), msgList) } // 阻塞主協程 time.Sleep(time.Second*10
) }
I can see a bigger world.