golang在语言级别支持协程goroutine,能够更便捷的实现并发编程.
并发编程最常见的就是生产者消费者模式,该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。简单地说,就是生产者生产一些数据,然后放到buffer中,同时消费者从buffer中来取这些数据。这样就让生产消费变成了异步的两个过程。当buffer中没有数据时,消费者就进入等待过程;而当buffer中数据已满时,生产者则需要等待buffer中数据被取出后再写入。
golang生产者消费者简单例子:
package main
import (
"fmt"
"time"
)
func Producer(id int, item chan int) {
for i := 0; i < 10; i++ {
item <- i
fmt.Printf("Producer %d produces data: %d\n", id, i)
time.Sleep(10 * 1e6)
}
}
func Consumer(id int, item chan int) {
for i := 0; i < 20; i++ {
c_item := <-item
fmt.Printf("Consumer %d get data: %d\n", id, c_item)
time.Sleep(10 * 1e6)
}
}
func main() {
item := make(chan int, 6)
go Producer(1, item)
go Producer(2, item)
go Consumer(1, item)
time.Sleep(1 * 1e9)
}