> For the complete documentation index, see [llms.txt](https://wskdsgcf.gitbook.io/mastering-go-zh-cn/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wskdsgcf.gitbook.io/mastering-go-zh-cn/09.0/09.1.md).

# 09.1 关于进程，线程和Go协程

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

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

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

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

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