Goroutine是建立在线程之上的轻量级的抽象。它允许我们以非常低的代价在同一个地址空间中并行地执行多个函数或者方法。相比于线程,它的创建和销毁的代价要小很多,并且它的调度是独立于线程的。在golang中创建一个Goroutine非常简单,使用“走”关键字即可:
包mainimport (“fmt”“时间”)学习(){fmt func。Println(“我的第一个goroutine”)}函数主要(){去学习()/*我们使用时间睡眠,这样主程序不执行goroutine之前终止。*/?1 * time.Second) fmt睡觉。Println(主要功能)}
引用>这段代码的输出是这样的:
我第一次goroutinemain函数
引用>如果把睡眠去掉的话,输出就会变成:
<代码> 代码>
主要功能这是因为,和线程一样,golang的主函数(其实也跑在一个goroutine中)并不会等待其它goroutine结束。如果主goroutine结束了,所有其它goroutine都将结束。
下面看下走语言学习之goroutine的相关内容。
<强>协程协同程序强>
特点
<李>轻量级的“线程”李> <李>非抢占式多任务处理,由协程主动交出控制权李> <李>编译器/解释器/虚拟机层面的多任务,非操作系统李> <李>多个协程可以在一个或多个线程上执行
李>去关键字开启一个协程
函数main () { 我:=0;我& lt;10;我+ + { func (int) { 为{ fmt.Println(我) } }(我) } time . sleep (time.Millisecond) }goroutine可能的切换点(转让控制权)
<李> I/O,选择李> <李> 李>频道 <李>等待锁李> <李>函数调用(有时)李> <李> routime.Goshed() 李> <李>只是参考,不能保证切换,不能保证在其他地方不切换李>
以上所述是小编给大家介绍的去语言学习之goroutine详解,希望对大家有所帮助!
去语言学习之goroutine详解