学习实例(二)—— goroutine 和 channel

 

前一章:欢迎访问 Go语言学习(一)

Linux 下编写方法:

以上是一个求和的计算,Go语言代码

首先对 goroutine 和 channel 进行一个讲解。

goroutine 是Go语言并行设计的核心。

goroutine是一种比线程更轻量的实现,十几个goroutine可能在底层就是几个线程。

要使用goroutine只需要简单的在需要执行的函数前添加go关键字即可。//参见main函数内 第4.5两行

当执行goroutine时候,go语言立即返回,接着执行剩余的代码,goroutine不阻塞主线程。

channel 就像一个管道,但是可以双向传输数据,通过它我们可以接收和发送数据。//其实我觉得和指针有点像…个人见解

前面的代码中,假如result 是一个channel那么:result <- value 是将数据发送到result, 而key <- result就是从result中接收一个数据.

值得注意的地方是channel只能通过Go语言内建的函数 make(chan type) 创建,其中type指明了该channel能传递的数据类型。

代码解析:

首先main函数内:

声明了一个int类型的数组(好吧,还是叫切片吧),然后通过内置函数make创建了一个channel,类型为int 名称为 result …

接下来通过go关键字 执行了两个 goroutine …它们的功能分别是计算切片a 的前半部分和后半部分的和。

在这里,main函数碰到go关键字,派发了 goroutine 执行相应函数后,立即返回执行剩余的代码,不会等待 goroutine 的返回。

在sum函数内:

计算切片的和,然后将结果发送到 channel…

接下来在main函数内:

x, y := <-result, <-result //这个语句从 channel 内获取结果 //PS.main函数会一直挂起,直到能从channel result 中获取数据。

最后,打印输出数据。

 

以上是 Go语言 简单的并行设计。

欢迎访问 Go语言学习(三)

Go语言学习(二)
Tagged on: