amb*_*air 2 queue multithreading go
是否有一个简单的程序,演示如何在Go中运行队列.我只需要在队列中添加1到10之类的东西,并使用另一个线程并行地从队列中拉出那些.
并发使用安全的队列基本上是一种语言结构:channel.
通道设计 - 对于并发发送和接收是安全的.这是详细说明:如果我正确使用频道,我是否需要使用互斥锁?在其上发送的值按发送顺序接收.
你可以在这里阅读更多关于频道的信息:golang频道用于什么?
一个非常简单的例子:
c := make(chan int, 10) // buffer for 10 elements
// Producer: send elements in a new goroutine
go func() {
for i := 0; i < 10; i++ {
c <- i
}
close(c)
}()
// Consumer: receive all elements sent on it before it was closed:
for v := range c {
fmt.Println("Received:", v)
}
Run Code Online (Sandbox Code Playgroud)
输出(在Go Playground上试试):
Received: 0
Received: 1
Received: 2
Received: 3
Received: 4
Received: 5
Received: 6
Received: 7
Received: 8
Received: 9
Run Code Online (Sandbox Code Playgroud)
请注意,通道缓冲区(本例中为10)与要通过它"发送"的元素数无关.缓冲区告诉通道可以"存储"多少元素,换句话说,当没有人从中接收时,可以在没有阻塞的情况下发送多少元素.当通道的缓冲区已满时,进一步的发送将阻塞,直到有人开始从中接收值.
| 归档时间: |
|
| 查看次数: |
544 次 |
| 最近记录: |