一、Go协程
1、Go协程和Go主线程
1)Go主线程(有程序员直接称为线程/也可以理解成进程):一个Go线程上,可以起多个协程,你可以这样理解,协程是轻量级的线程[编译器做优化]。
2)Go协程的特点
有独立的栈空间
共享程序堆空间
调度由用户控制
协程是轻量级的线程9o线程-协程
2、案例说明
请编写一个程序,完成如下功能:
1)在主线程(可以理解成进程)中,开启一个goroutine,该协程每隔1秒输出"hello,world"
2)在主线程中也每隔一秒输出“hello,golang"”,输出10次后,退出程序
扫描二维码关注公众号,回复:
11378926 查看本文章
3)要求主线程和goroutine同时执行.
4)画出主线程和协程执行流程图
package main import( "fmt" "strconv" "time" ) func test(){ fori :=1; i<=10; i++{ fmt.Println("tesst() hello,world"+strconv.rtoa(i)) time.sleep(time.second) } func main(){ go test() ∥开启了一个协程 for i :=1; i<=10; i++{ fmt.Print1n("main() he11o,golang"+strconv.rtoa(i)) time.sleep(time.second) } }
程序关系示例图
3、协程小结
1)主线程是一个物理线程,直接作用在cpu上的。是重量级的,非常耗费cpu 资源。
2)协程从主线程开启的,是轻量级的线程,是逻辑态。对资源消耗相对小。
3)Golang的协程机制是重要的特点,可以轻松的开启上万个协程。其它编程语言的并发机制是一般基于线程的,开启过多的线程,资源耗费大,这里就突显Golang在并发上的优势了