Go学习之路:并发(DAY 3)
创始人
2024-03-08 02:48:03

文章目录

    • 前引
    • 并发
      • 1、Go协程/简单创建
      • 2.1、信道/简单创建信道
      • 2.2、信道/限制了大小的信道
      • 2.3、信道/range close信道
      • 3.1、Select语句


前引


听了会歌 一看了下今天已经下午2:50了
我们学校也好像开始放学生们回家了

那今天最后就愉快愉快的把我们的 A Tour Of Go 最后一程给送走吧
并发


并发


1、Go协程/简单创建


goroutine 大名鼎鼎的Go协程 原语言支持的协程
简单测试一下吧 这里也就是简单介绍


package mainimport "fmt"func TestGoroutine(str *string) {fmt.Println(*str)
}func main() {str := "hello"teststr := "say hello"go TestGoroutine(&str)TestGoroutine(&teststr)
}

运行效果
在这里插入图片描述


2.1、信道/简单创建信道


可以把其作为linux中的共享信道 作为pipe用
其实我个人认为就是pipe 而pipe在linux作为共享进程的通讯工具

这个就作为go中独有的channel 下面是简单应用


package mainimport "fmt"func TestGoroutine(str *string) {fmt.Println(*str)
}func Sum(slice []int, channel chan int) {sum := 0for _, num := range slice {sum += num}channel <- sum
}func main() {slice := []int{1, 2, 3, 4, 5, 10, 12, 30}ch1, ch2 := make(chan int), make(chan int)go Sum(slice[:len(slice) / 2], ch1)go Sum(slice[len(slice) / 2:], ch2)sum1, sum2 := <-ch1, <-ch2fmt.Println(sum1, sum2, sum1 + sum2)
}

2.2、信道/限制了大小的信道


设置大小的信道 一旦信道的空间被塞满了 一旦继续塞了之后则直接会被阻塞

创建出信道的格式是make(chan type, space int)


例如下面 所有的协程则将休眠

package mainimport "fmt"func main() {ch := make(chan int, 2)ch <- 1ch <- 2ch <- 3fmt.Println(<-ch)fmt.Println(<-ch)
}

在这里插入图片描述


2.3、信道/range close信道


rangeclose信道

close信道的时候 如果对方不听的进入range状态 则可以直接断开
range则是一直获取


下面是简单的例子 就用示例代码吧

package mainimport ("fmt"
)func fibonacci(n int, c chan int) {x, y := 0, 1for i := 0; i < n; i++ {c <- xx, y = y, x+y}close(c)
}func main() {c := make(chan int, 10)go fibonacci(cap(c), c)for i := range c {fmt.Println(i)}
}

运行效果
在这里插入图片描述


3.1、Select语句


select语句类似于IO多路复用了 只不过在这里和IO多路复用原理感觉是差不多的 但不多揣测
下面用示例代码当例子


package mainimport "fmt"func fibonacci(c, quit chan int) {x, y := 0, 1for {select {case c <- x:x, y = y, x+ycase <-quit:fmt.Println("quit")return}}
}func main() {c := make(chan int)quit := make(chan int)go func() {for i := 0; i < 10; i++ {fmt.Println(<-c)}quit <- 0}()fibonacci(c, quit)
}

运行效果
在这里插入图片描述


剩下的就是并发了 这个就交给项目中实际操作来熟悉了
今天主要花时间去填写资料了 剩下的就不说了

go的新手村先走在这里吧

相关内容

热门资讯

猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...