From 57d9b604b2f7254faca1bb671ca3593eb47a970e Mon Sep 17 00:00:00 2001 From: Tinywan <756684177@qq.com> Date: Wed, 8 Aug 2018 16:25:48 +0800 Subject: [PATCH] =?UTF-8?q?21=20-=20=E5=8D=8F=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tinywan <756684177@qq.com> --- README.md | 2 +- demo/slice/demo01.go | 19 +++++ demo/slice/demo02.go | 31 ++++++++ docs/golang_tutorial_21.md | 129 ++++++++++++++++++++++++++++++++ images/Goroutines-explained.png | Bin 0 -> 44684 bytes 5 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 demo/slice/demo01.go create mode 100644 demo/slice/demo02.go create mode 100644 docs/golang_tutorial_21.md create mode 100644 images/Goroutines-explained.png diff --git a/README.md b/README.md index 551e957..6402161 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ $ go get github.com/Tinywan/golang-tutorial ## 第9章 并发 ### 20 - 并发介绍 -### 21 - 协程 +### [ 21 - 协程](/docs/golang_tutorial_21.md) ### 22 - 管道 ### 23 - 缓冲信道和工作池 ### 24 - Select diff --git a/demo/slice/demo01.go b/demo/slice/demo01.go new file mode 100644 index 0000000..0306140 --- /dev/null +++ b/demo/slice/demo01.go @@ -0,0 +1,19 @@ +package main + +import ( + "fmt" +) + +func modify(sls []int) { + sls[0] = 90 +} + +func main() { + a := [3]int{89, 90, 91} + modify(a[:]) + fmt.Println(a) + + b := []int{100,200,300} + fmt.Println(b[:]) + fmt.Println(b[:1]) +} \ No newline at end of file diff --git a/demo/slice/demo02.go b/demo/slice/demo02.go new file mode 100644 index 0000000..a673d29 --- /dev/null +++ b/demo/slice/demo02.go @@ -0,0 +1,31 @@ +package main + +import ( + "time" + "fmt" +) + +func hello() { + fmt.Println("This is hello function") +} + +func numbers() { + for i := 0; i < 5; i++ { + time.Sleep(250 * time.Millisecond) + fmt.Printf("%d ", i) + } +} + +func alphabets(){ + for i := 'a'; i <= 'e'; i++ { + time.Sleep(400 * time.Millisecond) + fmt.Printf("%c ", i) + } +} + +func main() { + go numbers() + go alphabets() + time.Sleep(3000 * time.Millisecond) + fmt.Println("main terminated") +} \ No newline at end of file diff --git a/docs/golang_tutorial_21.md b/docs/golang_tutorial_21.md new file mode 100644 index 0000000..c2aee07 --- /dev/null +++ b/docs/golang_tutorial_21.md @@ -0,0 +1,129 @@ + +21 - 协程 +======================== + +上一节:[第十六篇 结构体](/docs/golang_tutorial_16.md) +下一节:[第十八篇 接口一](/docs/golang_tutorial_18.md) + +这是本Golang系列教程的第21篇。 + +在上一篇教程中,我们讨论了并发,以及并发和并行的区别。在这篇教程中我们将讨论在Go中如何通过Go协程实现并发。 + +## 什么是协程? + +Go协程(`Goroutine`)是与其他[函数](/docs/golang_tutorial_6.md)或[方法](/docs/golang_tutorial_17.md)同时运行的函数或方法。可以认为Go协程是轻量级的线程。与创建线程相比,创建Go协程的成本很小。因此在Go中同时运行上千个协程是很常见的。 + +## Go协程对比线程的优点 + +* **与线程相比,Go协程的开销非常小。Go协程的堆栈大小只有几kb,它可以根据应用程序的需要而增长和缩小,而线程必须指定堆栈的大小,并且堆栈的大小是固定的**。 +* **Go协程被多路复用到较少的OS线程。在一个程序中数千个Go协程可能只运行在一个线程中。如果该线程中的任何一个Go协程阻塞(比如等待用户输入),那么Go会创建一个新的OS线程并将其余的Go协程移动到这个新的OS线程。所有这些操作都是 runtime 来完成的,而我们程序员不必关心这些复杂的细节,只需要利用 Go 提供的简洁的 API 来处理并发就可以了。** +* **Go 协程之间通过信道(`channel`)进行通信。信道可以防止多个协程访问共享内存时发生竟险(race condition)。信道可以想象成多个协程之间通信的管道。我们将在下一篇教程中介绍信道。** + +## 如何创建一个协程? + +在函数或方法调用之前加上关键字 `go`,这样便开启了一个并发的Go协程。 + +让我们创建一个协程: +```golang +package main + +import ( + "fmt" +) + +func hello() { + fmt.Println("Hello world goroutine") +} +func main() { + go hello() + fmt.Println("main function") +} +``` + +第11行,`go hello()` 开启了一个新的协程。现在 `hello()` 函数将和 `main()` 函数一起运行。`main` 函数在单独的协程中运行,这个协程称为主协程。 + +运行这个程序,你将得到一个惊喜。 + +程序仅输出了一行文本: `main function`。 + +我们创建的协程发生了什么?我们需要了解Go协程的两个属性,以了解为什么发生这种情况。 + +* 当创建一个Go协程时,创建这个Go协程的语句立即返回。与函数不同,程序流程不会等待Go协程结束再继续执行。程序流程在开启Go协程后立即返回并开始执行下一行代码,忽略Go协程的任何返回值。 +* 在主协程存在时才能运行其他协程,主协程终止则程序终止,其他协程也将终止。 + +我想你已经知道了为什么我们的协程为什么没有运行。在11行调用 `go hello()`后,程序的流程直接调转到下一条语句执行,并没有等待 `hello` 协程退出,然后打印 `main function`。接着主协程结束运行,不会再执行任何代码,因此 `hello` 协程没有得到运行的机会。 + +让我们修复这个问题: + +```golang +package main + +import ( + "fmt" + "time" +) + +func hello() { + fmt.Println("Hello world goroutine") +} +func main() { + go hello() + time.Sleep(1 * time.Second) + fmt.Println("main function") +} +``` + +上面的程序中,第13行,我们调用 `time` 包的 `Sleep` 函数来使调用该函数所在的协程休眠。在这里是让主协程休眠1秒钟。现在调用 `go hello()` 有了足够的时间得以在主协程退出之前执行。该程序首先打印 `Hello world goroutine`,等待1秒钟之后打印 `main function`。 + +在主协程中使用 `Sleep` 函数等待其他协程结束的方法是不正规的,我们用在这里只是为了说明**Go协程**是如何工作的。信道可以用于阻塞主协程,直到其他协程执行完毕。我们将在下一篇教程中讨论信道。 + +## 开启多个协程 + +让我们写一个程序开启多个协程来更好的理解协程。 + +```golang +package main + +import ( + "fmt" + "time" +) + +func numbers() { + for i := 1; i <= 5; i++ { + time.Sleep(250 * time.Millisecond) + fmt.Printf("%d ", i) + } +} +func alphabets() { + for i := 'a'; i <= 'e'; i++ { + time.Sleep(400 * time.Millisecond) + fmt.Printf("%c ", i) + } +} +func main() { + go numbers() + go alphabets() + time.Sleep(3000 * time.Millisecond) + fmt.Println("main terminated") +} +``` + +上面的程序在第21和22行开启了两个协程。现在这两个协程同时执行。`numbers` 协程最初睡眠 `250` 毫秒,然后打印 `1`,接着再次睡眠然后打印`2`,以此类推,直到打印到 `5`。类似地,`alphabets` 协程打印从 `a` 到 `e` 的字母,每个字母之间相隔 `400` 毫秒。主协程开启 `numbers` 和 `alphabets` 协程,等待 `3000` 毫秒,最后终止。 + +程序的输出为: + +```golang +1 a 2 3 b 4 c 5 d e main terminated +``` + +下面的图片描述了这个程序是如何工作的,请在新的标签中打开图像以获得更好的效果:) + +![Goroutines-explained](../images/Goroutines-explained.png) + +上图中,**蓝色**的线框表示 `numbers` 协程,**栗色**的线框表示 `alphabets` 协程。**绿色**的线框表示主协程。**黑色**的线框合并了上述三个协程,向我们展示了该程序的工作原理。每个框顶部的 `0ms`,`250 ms` 的字符串表示以**毫秒**为单位的时间,在每个框底部的 `1`,`2`,`3` 表示输出。 + +蓝色的线框告诉我们在 250ms 的时候打印了`1`,在 `500ms` 的时候打印了`2`,以此类推。因此最后一个线框底部的输出:`1 a 2 3 b 4 c 5 d e main terminated` 也是整个程序的输出。上面的图像是很好理解的,您将能够了解该程序的工作原理。 + +Go协程的介绍就到这里。祝你有美好的一天! +希望你喜欢阅读。请留下宝贵的意见和反馈:) \ No newline at end of file diff --git a/images/Goroutines-explained.png b/images/Goroutines-explained.png new file mode 100644 index 0000000000000000000000000000000000000000..cb5a9908ccb8e2b847f529c253e263f6a338e6ae GIT binary patch literal 44684 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

6Ks_FIoT}9y$-|Z~sPZ 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 M>s~2Wv%C9$0lu2QuK)l5 literal 0 HcmV?d00001