Goroutine,内存和OS线程
Go具有可根据需要增长的分段堆栈。运行时执行调度,而不是操作系统。运行时将goroutine复用到相对较少的实际OS线程上。
Goroutines切换成本
Goroutine是协同调度的,当发生切换时,仅需要保存/恢复3个寄存器-
程序计数器,堆栈指针和DX。从操作系统的角度来看,Go程序的行为就像一个事件驱动程序。
Goroutine和CPU
您不能直接控制运行时将创建的线程数。可以通过调用来设置变量GOMAXPROCS来设置程序使用的处理器内核数量
runtime.GOMAXPROCS(n)。
程序计数器
和一个完全不同的故事
在计算中,程序是计算机要执行的一组特定的有序操作。指令是由程序赋予计算机处理器的命令。在计算机内,地址是内存或存储中的特定位置。程序计数器寄存器是处理器使用的一小部分数据存放位置之一。
这是关于程序如何工作以及如何相互通信的另一个故事,它与goroutine主题没有直接关系。
资料来源:
- http://blog.nindalf.com/how-goroutines-work/
- https://gobyexample.com/goroutines
- http://tleyden.github.io/blog/2014/10/30/goroutines-vs-threads/
- http://whatis.techtarget.com/definition/program-counter



