首页
学习
活动
专区
工具
TVP
发布

GO语言的并发Concurrency:Goroutine与通信机制Channel

并发主要是由切换时间片来实现“同时”运行,并行则是直接利用多核实现多线程的运行,但GO可以设置使用的核数,以发挥计算机的能力,称为高并发。Goroutine即是官方实现的超级“线程池”。他的通信模型,是以消息机制而非共享内存作为方式来进行。消息机制认为每个并发单元是自包含的、独立的个体,并且都有自己的变量,但在不同并发单元间这些变量不共享。每个并发单元的输入和输出只有一种,那就是消息。这有点类似于进程的概念,每个进程不会被其他进程打扰,它只做好自己的工作就可以了。不同进程间靠消息来通信,它们不会共享内存。即著名的口号:“不要通过共享内存来通信,而应该通过通信来共享内存。”

Go语言提供的消息通信机制被称为channel,我们可以使用channel在两个或多个goroutine之间传递消息。channel是进程内的通信方式,因此通过channel传递对象的过程和调用函数时的参数传递行为比较一致,比如也可以传递指针等。channel是类型相关的。也就是说,一个channel只能传递一种类型的值,这个类型需要在声明channel时指定。

实例演示(例子中含有匿名函数的使用):

1 package main

2 import "fmt"

3 func main() {

4 c := make(chan bool)

5 go func() {

6 fmt.Println("您好,欢迎测试Goroutine")

7 c

8 }()

9

10 }

这是一个很简单的实例,执行过程如下:

当主程序运行到第5行时,并发执行匿名函数go func()。

此时主程序并未停止,执行到第9行时,会等待go func()中的传回的信息,即c值

当并发程序go func()执行完毕时,发送信息,将TRUE值传递给通道;

当通道收到信息后,传回到第9行。主程序:好,收到信息。继续运行,读取通道信息,结束程序。

程序及运行结果:

go 并发

【分享成果,随喜真能量】

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180321A1V6NI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券