Goroutine 是GO语言特有的名词,区别于进程Process,线程Thread。
Gorourine 是与其他函数或方法同时运行的函数或方法。Goroutines可以被认为是轻量级的线程。与线程相比,创造协程的成本很小,他就是一个代码,一个函数入口。因此他非常廉价,Go应用程序可以并发运行数千个Goroutines。
主Goroutine是指封装main函数的goroutine,他所做的事情并不是执行一个main函数这么简单。他首先做的是:设定每一个goroutine所能申请的栈空间的最大尺寸。如果有一个goroutine的栈内存尺寸大于这个限制,那么运行时系统就会依法一个栈溢出的运行时恐慌。随后,这个go程序的运行也会终止。
此后,主协程会进行一系列的初始化工作,涉及的工作内容大致如下:
1. 创建一个特殊的defer语句,用于在主协程退出时做出必要的善后处理。因为主协程也可能非正常的结束。
2. 启动专用于在后台清扫内存垃圾的goroutine,并设置可用的标识
3. 执行main包中的init函数
4.执行main函数
如何使用协程:
在函数或方法调用前加上关键字go,就会同时运行一个新的Goroutine。