Go 语言圣经 9.8 Goroutines和线程
其他
2018-09-03 08:44:43
阅读次数: 0
9.8 Goroutines和线程
知识点
- 1.每一个OS线程都有一个固定大小的内存块(一般会是2MB)来做栈, 这个栈会用来存储当前正在被调用或挂起(指在调用其它函数时)的函数的内部变量
- 2.goroutine会以一个很小的栈开始其生命周期,一般只需要2KB
- 3.和OS线程不太一样的是一个goroutine的栈大小并不是固定的
- 4.goroutine的栈的最大值有1GB
- 5.Go的运行时包含了其自己的调度器
- 6.Go调度器的工作和内核的调度是相似的,但是这个调度器只关注单独的Go程序中的goroutine
- 7.Go调度器并不是用一个硬件定时器而是被Go语言”建筑”本身进行调度的
- 8.Go的调度方式不需要进入内核的上下文,所以重新调度一个goroutine比调度一个线程代价要低得多
- 9.Go的调度器使用GOMAXPROCS的变量来决定会有多少个操作系统的线程同时执行Go的代码,默认的值是CPU的核心数
- 10.goroutine没有可以被程序员获取到的身份(id)的概念。这一点是设计上故意而为之,由于thread-local storage总是会被滥用
- 11.Go鼓励更为简单的模式,这种模式下参数对函数的影响都是显式的
代码
//等待你们的完善
——不足之处,欢迎补充——
备注
《Go 语言圣经》
- 学习记录所使用的GO版本是1.8
- 学习记录所使用的编译器工具为GoLand
- 学习记录所使用的系统环境为Mac os
- 学习者有一定的C语言基础
代码仓库
转载自blog.csdn.net/liushihua147/article/details/81868626