goroutine使用
Posted dqh123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了goroutine使用相关的知识,希望对你有一定的参考价值。
Goroutine是建立在线程之上的轻量级的抽象。它允许我们以非常低的代价在同一个地址空间中并行地执行多个函数或者方法。相比于线程,它的创建和销毁的代价要小很多,并且它的调度是独立于线程的。在golang中创建一个goroutine非常简单,使用“go”关键字即可:
Goroutine与线程的区别
许多人认为goroutine比线程运行得更快,
这是一个误解。Goroutine并不会更快,
它只是增加了更多的并发性。
当一个goroutine被阻塞(比如等待IO),golang的scheduler会调度其它可以执行的goroutine运行。
与线程相比,它有以下几个优点:
内存消耗更少:
Goroutine所需要的内存通常只有2kb,而线程则需要1Mb(500倍)。
创建与销毁的开销更小
package main import ( "fmt" "time" ) func newTask() { for { fmt.Println("this is a newTask") time.Sleep(time.Second)//延时1s } } func main() { go newTask() //go 关键字就新建一个协程,新建一个任务 /*for{ fmt.Println("this is main goroutine") time.Sleep(time.Second) }*/ i := 0 for{ i++ fmt.Println("this is main goroutine") time.Sleep(time.Second) if i==2{ break } } }
package main import ( "fmt" "time" ) //主程序退出 子程序跟着退出,子程序退出需要时间 func main(){ go func() { i := 0 for { i++ fmt.Println("子协程 i=",i) time.Sleep(time.Second) } }() i := 0 for{ i++ fmt.Println("main i=",i) time.Sleep(time.Second) if i == 2{ break } } }
以上是关于goroutine使用的主要内容,如果未能解决你的问题,请参考以下文章