天天看點

golang并發-生産者消費者并發模型

文章目錄

  • ​​簡介​​
  • ​​生産者消費者模型​​

簡介

并發不是并行,并發更多是關注程式設計層面的,并行是程式運作層面的。另外需要注意的是 golang 中對于無緩沖的 channel 在接收到一個資料時候就會直接陷入阻塞但是對于有緩沖的 channel,在 channel 滿載後再有一個數進入才會陷入阻塞

生産者消費者模型

// Producer 生産者
func Producer(line chan<- int) {
    for {
        line <- 1
    }
}

// Consumer 消費者
func Consumer(line <-chan int) {
    for n := range line {
        fmt.Println("消費: ", n)
    }
}

// 生産者消費者模型
func main() {
    // 生産線
    line := make(chan int, 50)

    // 生産者 1
    go Producer(line)
    // 生産者 2
    go Producer(line)
    // 消費者
    go Consumer(line)

    // 主攜程等待 1000ms 後結束
    time.Sleep(1 * time.Millisecond)
}