关于进程,线程和Go协程

进程是包含计算机指令,用户数据和系统数据的程序执行环境,以及包含其运行时获得的其他类型资源。而程序是一个文件,其中包含用于初始化进程的指令和用户数据部分的指令和数据。

线程相对于进程是更加小巧而轻量的实体,线程由进程创建且包含自己的控制流和栈,线程和进程的区别在于:进程是正在运行的二进制文件,而线程是进程的子集。

Goroutine是Go程序并发执行的最小单元,因为Goroutine不是像Unix进程那样是自治的实体,Goroutine生活在Unix进程的线程中。Goroutine的主要优点是非常轻巧,运行成千上万或几十万都没有问题。

总结一下,Goroutine比线程更轻量,而线程比进程更轻量。实际上,一个进程可以有多个线程以及许多Goroutine,而Goroutine需要一个进程的环境才能存在。因此,为了创建一个Goroutine,你需要有一个进程且这个进程至少有一个线程—Unix负责进程和线程管理,而Go工程师只需要处理Goroutine,这极大的降低了开发的成本。

到现在为止,你知道了关于进程,线程和Goroutine的基本知识,下一小节我们聊聊Go调度器。