开发者学堂课程【Go语言核心编程 - 面向对象、文件、单元测试、反射、TCP编程:协程快速入门】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/626/detail/9748
协程快速入门
一,goroutine-快速入门
快速入门小结
主线程是一个物理线程,直接作用在 cp 上的。是重量级的,非常耗费 cpu 资源。
协程从主线程开启的,是轻量级的线程,是逻辑态。对资源消耗相对小。
Golang 的协程机制是重要的特点,可以轻松的开启上万个协程。其它编程语言的并发机制是一般基于线程的,开启过多的线程,资源耗费大,这里就突显 Golang 在并发上的优势了。
案例说明:
请编写一个程序,完成如下功能:
(1)在主线程(可以理解成进程)中,开启一个 goroutine 该协程每隔1秒输出"hello,world"
(2)在主线程中也每隔一秒输出"hellogolang",输出10次后,退出程序
(3)要求主线程和 goroutine 同时执行
(4)画出主线程和协程执行流程图
代码实现:
第一步:创建 goroutinedemo,新建 main.go
package main
import (
"fmt"
"strconv"
)
第二步:任务粘贴过来
//在主线程(可以理解成进程)中,开启一个 goroutine,该协程每隔1秒输出"hello,world"
//在主线程中也每隔一秒输出"hello, golang",输出10次后,退出程序
//要求主线程和 goroutine 同时执行
第三步:填写主函数
//编写一个函数,每隔1秒输出"hello,world"func test() {
for
i
:=1;
i
< 1
θ
; i++ {
fmt.Println( "hello,world”+strconv.itoa(i))
time. sleep(time .Second)
说明:应进行休眠一下func main() {
第四步:只有填一个 go 就开启一个协程
go test()//开启了一个协程for i :=1; I <=1
θ
; i++ {
fmt . Println(" main() hello, golang" + strconv. Itoa(1))
time . Sleep(time Second)
输出效果说明:main 这个主线程和 test 这个协程
tesst < he llo.world 1
nain() he 1 lo。go lang2
tesst < hello.world 2
nain() he 1 lo . go lang3
tesst “he llo.world 3
tesst ( he llo.world 4
nain() he 1lo. go lang4
tesst <) hello,world 5
nain() he 1lo. go lang5
tesst ( hello.world 6
nain() he 1lo . go lang6
tesst () hello.world 7
nain() he 1lo. go lang7
…….
主线程和协程执行流程图