一 需求
编写一个程序,完成如下功能。
1 在主线程(可以理解成进程)中,开启一个 goroutine, 该协程每隔 1 秒输出 "hello,world"。
2 在主线程中也每隔一秒输出"hello,golang", 输出 10 次后,退出程序。
3 要求主线程和 goroutine 同时执行。
4 画出主线程和协程执行流程图。
二 代码
package main
import (
"fmt"
"strconv"
"time"
)
func test() {
for i := 1; i <= 10; i++ {
fmt.Println("tesst () hello,world " + strconv.Itoa(i))
time.Sleep(time.Second)
}
}
func main() {
go test() // 开启了一个协程
for i := 1; i <= 10; i++ {
fmt.Println(" main() hello,golang" + strconv.Itoa(i))
time.Sleep(time.Second)
}
}
三 测试
main() hello,golang1
tesst () hello,world 1
tesst () hello,world 2
main() hello,golang2
main() hello,golang3
tesst () hello,world 3
main() hello,golang4
tesst () hello,world 4
tesst () hello,world 5
main() hello,golang5
main() hello,golang6
tesst () hello,world 6
tesst () hello,world 7
main() hello,golang7
main() hello,golang8
tesst () hello,world 8
tesst () hello,world 9
main() hello,golang9
main() hello,golang10
tesst () hello,world 10
四 说明
从输出的效果看,main 这个主线程和 test 协程同时执行。
五 主线程和协程执行流程图
六 小结
1 主线程是一个物理线程,直接作用在 cpu 上的,是重量级的,非常耗费 cpu 资源。
2 协程是从主线程开启的,是轻量级的线程,是逻辑态。对资源消耗相对小。
3 Golang 的协程机制是重要的特点,可以轻松的 开启上万个协程。其它编程语言的并发机制一般是基于线程的,开启过多的线程,资源耗费大,这里就突显 Golang 在并发上的优势。