内容简介:go version go1.11.2 linux/amd64重点是开头的无缓冲通道可以塞进一个信息,然后继续往下走,
go版本
go version go1.11.2 linux/amd64
无缓冲通道
测试样例
package main
import "fmt"
func main(){
naturals:=make(chan int,0)//无缓存通道
squares:=make(chan int)
go func(){
for x:=0;x<10;x++{
fmt.Println("naturals start ",x)
naturals<-x
fmt.Println("naturals end ",x)
}
fmt.Println("naturals close ")
close(naturals)
}()
go func(){
for x:=range naturals{
fmt.Println("squares start ",x)
squares<-x
fmt.Println("squares end ",x)
}
fmt.Println("squares close ")
close(squares)
}()
for x:=range squares{
fmt.Println("main ",x)
}
}
输出
naturals start 0 naturals end 0 naturals start 1 squares start 0 squares end 0 squares start 1 naturals end 1 naturals start 2 main 0 main 1 squares end 1 squares start 2 squares end 2 main 2 naturals end 2 naturals start 3 naturals end 3 naturals start 4 squares start 3 squares end 3 squares start 4 naturals end 4 naturals start 5 main 3 main 4 squares end 4 squares start 5 squares end 5 main 5 naturals end 5 naturals start 6 naturals end 6 naturals start 7 squares start 6 squares end 6 squares start 7 naturals end 7 naturals start 8 main 6 main 7 squares end 7 squares start 8 squares end 8 main 8 naturals end 8 naturals start 9 naturals end 9 naturals close squares start 9 squares end 9 squares close main 9
总结
重点是开头的
naturals start 0 naturals end 0 naturals start 1 squares start 0
无缓冲通道可以塞进一个信息,然后继续往下走,
如果这个信息还没有接收,继续发送消息,则会造成阻塞,会切换到另外一个goroutine
有缓冲通道
测试样例
package main
import "fmt"
func main(){
naturals:=make(chan int,1)//有缓存通道 容量为1
squares:=make(chan int)
go func(){
for x:=0;x<10;x++{
fmt.Println("naturals start ",x)
naturals<-x
fmt.Println("naturals end ",x)
}
fmt.Println("naturals close ")
close(naturals)
}()
go func(){
for x:=range naturals{
fmt.Println("squares start ",x)
squares<-x
fmt.Println("squares end ",x)
}
fmt.Println("squares close ")
close(squares)
}()
for x:=range squares{
fmt.Println("main ",x)
}
}
输出
naturals start 0 naturals end 0 naturals start 1 naturals end 1 naturals start 2 squares start 0 squares end 0 squares start 1 naturals end 2 naturals start 3 main 0 main 1 squares end 1 squares start 2 squares end 2 squares start 3 main 2 main 3 squares end 3 naturals end 3 naturals start 4 naturals end 4 naturals start 5 naturals end 5 naturals start 6 squares start 4 squares end 4 squares start 5 naturals end 6 naturals start 7 main 4 main 5 squares end 5 squares start 6 squares end 6 squares start 7 main 6 main 7 squares end 7 naturals end 7 naturals start 8 naturals end 8 naturals start 9 naturals end 9 naturals close squares start 8 squares end 8 squares start 9 main 8 main 9 squares end 9 squares close
总结
重点是开头的
naturals start 0 naturals end 0 naturals start 1 naturals end 1 naturals start 2 squares start 0
容量为1的有缓冲通道可以塞进2个信息,然后继续往下走,
如果这2个信息还没有接收,继续发送消息,则会造成阻塞,会切换到另外一个goroutine
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Golang通道的无阻塞读写
- Golang并发:一招掌握无阻塞通道读写
- Node.js 指南(阻塞与非阻塞概述)
- Node.js 回调函数 阻塞与非阻塞
- 明明白白学 同步、异步、阻塞与非阻塞
- 从 Linux 源码看 socket 的阻塞和非阻塞
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Text Processing in Python
David Mertz / Addison-Wesley Professional / 2003-6-12 / USD 54.99
Text Processing in Python describes techniques for manipulation of text using the Python programming language. At the broadest level, text processing is simply taking textual information and doing som......一起来看看 《Text Processing in Python》 这本书的介绍吧!