思考从容器上该如何设置 GOMAXPROCS 大小引发,这个数字设置多少合理,其到底限制了什么,cpu 核数,系统线程数还是协程数?
背景
Go 语言可以说为并发而生。Go 从语言级别支持并发,通过轻量级协程 Goroutine 来实现程序并发运行,go
关键字的强大与简洁是其它语言不可及的,接下来让我们一起来探索 Golang 中 Goroutine 与协程调度器设计的一些原理吧。
Go 协程
概念
进程: 操作系统分配系统资源(cpu 时间片,内存等)的最小单位
线程:轻量级进程,是操作系统调度的最小单位
协程:轻量级线程,协程的调度由程序控制
怎么理解
进程,线程的两个最小单位如何理解?
在早期面向进程设计的计算机结构中,进程就是操作系统分配系统资源与操作系统调度的最小单位
但在现代的计算结构中,进程升级为线程的容器,多个线程共享一个进程内的系统资源,cpu 执行(调度)对象是线程
轻量级进程与轻量级线程如何理解
轻量级进程:如下图各个进程拥有独立的虚拟内存空间,里面的资源包括