golang簡單的消費者生產者模型
阿新 • • 發佈:2021-10-21
code
package main import ( "fmt" "strconv" "time" ) // 生產者消費者模型 // 新增簡訊傳送任務 - 生產者 // 傳送簡訊 - 消費者 // 訊息有1w條 - 傳送指令碼 // 假定傳送一個訊息需要1s // 這裡傳送指令碼任務數量就是協程數|假設有10個協程那麼需要1ks\100個協程那麼需要100s // 生產者: 新增簡訊傳送任務 func Producer(msg string, msgList chan<- string) { msgList <- msg } // 消費者:傳送訊息 - 從訊息池裡面拿出任務傳送訊息I can see a bigger world.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) }