程序:由代码编译成功得到的二进制文件。在Windows中就是.exe文件。程序只占用磁盘空间。
进程:运行起来的程序。进程需要占用系统资源(内存,CPU)。进程是最小的系统资源分配单位,只是给线程提供执行环境。
由于一个进程产生一个进程地址空间,且进程地址空间相互独立,一个进程死亡,其他进程不会受到影响。
进程状态:进程的基本状态有5种。分别为初始态、就绪态、运行态、挂起态、终止态。其中初始态为进程准备阶段,常与就绪态结合来看。
线程:LWP(light weight process)轻量级进程。线程是最小的执行单位。CPU分配时间轮片的对象。
产生原因:提高争夺到CPU的概率。
协程:coroutine,也叫轻量级线程。 与传统的系统级线程和进程相比,携程最大的优势在于“轻量级”,可以轻松创建上万个而不会导致系统资源衰歇。而线程和进程通常很难超过1万个。一个线程中可以有任意多个协程,但某一时刻只能有一个协程在运行,多个协程分享该线程分配到的计算机资源。
产生原因:提高程序执行的效率。(利用闲暇时间执行其他任务)
go协程:叫goroutine。在进程中创建。它比线程更小,十几个goroutine可能体现在底层就是五六个线程,go语言内部帮你实现了这些goroutine之间的内存共享。执行goroutine只需要极少的栈内存(大概4~5kb),当然会根据相应的数据伸缩。也正因为如此,可同时运行成千上万个并发任务。goroutine比thread更易用,更高效,更轻便。一般情况下,一个普通计算机跑几十个线程就有点负载过大了,但是同样的机器却可以轻松的让成百上千个goroutine进行资源竞争。