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

Posted VBA语言专家

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 <- true

8   }()

9   <-c

10   }


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

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

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

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

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

  程序及运行结果:

获得免费程序

E-mail: sxznl18@126.com   password:18sxznl

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

 也可以扫描二维码:

以上是关于GO语言的并发Concurrency:Goroutine与通信机制Channel的主要内容,如果未能解决你的问题,请参考以下文章

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

go14--并发concurrency,Goroutine ,channel

Go语言开发Go语言并发编程

go并发3

go语言设计模式之Concurrency future

go语言设计模式之Concurrency barrier