Go 语言圣经 9.8 Goroutines和线程

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
9.8