要搞明白进程与线程的概念及两者区别,先要了解程序。
程序Program
A program is an executive file.
程序(如firefoc.exe)一个保存在磁盘中的可执行文件,包含代码或一组处理器指令。
程序是使用高级语言编写而成,但电脑只理解二进制代码,所以程序必须转换成二进制代码, 而这是编译器(compiler)的工作。
要执行一个程序,就先要将它加载到内存RAM(random access memory),还需要程序运行所需要的资源,比如寄存器、计数器、堆栈指针、堆、内存页等。这些资源是由操作系统管理的。
这是操作系统的工作。它会帮助将可执行程序加载到RAM并分配资源。程序就可以运行。
进程
在我们“碰”一个程序之前,他只是一个程序,但我们运行它之后,它就变成了进程。即,进程可以被认为是一个正在执行的程序。一个程序可以有多个进程。
每个进程都有自己独立的内存地址空间。这意味着当一个进程发生故障时,其他进程会继续运行。(Chrome是每一个tab都有自己的进程而闻名的。
线程
线程实际上是一个(正在执行的)进程的基本执行单元。 一个进程中至少有一个线程,称为主线程,往往有多个线程。而每个线程都有自己的资源,但他们共享内存地址空间,可以使用该共享内存空间在线程之间进行通信。但是一个行为不当的线程可能会导致整个进程中断。
操作系统如何在CPU上运行线程或进程?
通过上下文切换(context switch)