执行体是一个抽象的概念,在操作系统层面有多个概念与之对应,比如操作系统自己掌管的进程process ,进程内的线程 thread 以及进程内的协程coroutine也叫轻量级线程。与传统的系统线程和进程相比,协程的最大优势在于其轻量化,可以轻松创建上百万个协程而不会导致系统资源衰竭,而线程和进程通常最多也不能超过1万个。这就是协程也叫轻量级线程的原因

   多数语言在语法层面并不直接支持协程,而是通过库的方式支持,但用库的方式支持的功能也并不完整,比如仅仅提供轻量级线程的创建,销毁与切换等能力。如果在这样的轻量线程中调用一个同步IO操作,比如网络通信,本地文件读写,都会阻塞其他的并发执行的轻量级线程,从而无法真正达到轻量级线程本身期望达到的目标

 go语言在语言级别支持轻量级线程,goroutine,go语言标准库提供的所有系统调用操作,都会出让cpu给其他goroutine(创建协程会自动分配一个合适的CPU优先级,不管优先级如何都会与投稿及协程竞争CPU资源)这让轻量级线程的切换管理不依赖于系统的线程和进程也不依赖于CPU的核心数量,也不依赖CPU的核心数量,而是交给go语言运行时负责统一调度。

goroutine是go语言并行设计的核心,goroutine说到底其实就是协程,但是他比线程更小,十几个goroutine体现在底层也就是5,6个线程,执行goroutine只需极少的栈内存,当然会根据相应的数据伸缩,也正因为如此,程序可同时运行并发任务,goroutine比thread更易用,高效。

goroutine是通过go程序的runtime管理的一个线程管理器,goroutine通过关键字实现了,其实就是一个普通的函数。

go  he