Learn Golang in Days - Day 16-Go并发
简介
- go语言支持并发,只需要使用 go 关键字开启goroutine即可。
- goroutine是轻量级现场,goroutine由运行时进行调度管理
package main import "fmt" import "time" func say(s string) { for i := 0; i < 5; i++ { time.Sleep(100 * time.Millisecond) fmt.Println(s) } } func main() { go say("world") say("hello") }
通道channel
<-
ch <- v //v 发送到通道ch v := <- ch //从通道ch接收数据,并赋值给v
- 声明通道
- 默认情况下,通道是不带缓冲区的。
ch := make(chan int)
- 例子
package main import ( "fmt" ) // 求和 func sum(s []int, c chan int) { sum := 0 fmt.Printf("0***********\n") fmt.Println(s) for _, v := range s { fmt.Printf("%d\t",v) sum += v } c <- sum fmt.Printf("\n1***********\n") } func main() { // 初始化切片 s := []int{61,2123,123,55,66,7,7,8,88,9,990,4343,2342, 7, 3, 4, 5, 8} // 创建通道 c := make(chan int) //启动两个协程 go sum(s[:len(s)/2], c) go sum(s[len(s)/2:], c) // 从通道中接收 x, y := <-c, <-c fmt.Println("\n---------------------") fmt.Println(x, y, x+y) }
遍历通道与关闭通道
-
Go通过range关键字来遍历读取通道的数据,类似于数组与切片
v, ok := <- ch
package main import "fmt" import "time" func main() { c := make(chan int, 10) go fibonacci(cap(c), c) //遍历 for i := range c { fmt.Println(i) } } //斐波那契数列 func fibonacci(n int, c chan int) { x, y := 0, 1 for i := 0; i < n; i++ { fmt.Println(time.Now()) time.Sleep(3 * time.Second) // x 发送给通道c c <- x x, y = y, x+y } close(c) }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Java并发系列—并发编程基础
- [Java并发-17-并发设计模式] Immutability模式:如何利用不变性解决并发问题?
- JAVA并发编程之并发模拟工具
- Java并发系列—并发编程的挑战
- Core Java 并发:理解并发概念
- [Java并发-11] 并发容器的使用
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Designing Web Navigation
James Kalbach / O'Reilly Media / 2007-8-15 / USD 49.99
Thoroughly rewritten for today's web environment, this bestselling book offers a fresh look at a fundamental topic of web site development: navigation design. Amid all the changes to the Web in the pa......一起来看看 《Designing Web Navigation》 这本书的介绍吧!
Markdown 在线编辑器
Markdown 在线编辑器
HSV CMYK 转换工具
HSV CMYK互换工具