进程 Vs 线程
理解进程,线程以及两者之前的区别,对于学习并发编程,异步编程具有很大的帮助。
1. 应用程序
在理解进程,线程之前,需要搞明白一件事情,什么是程序?对于大家来说,一个应用程序就是一个"*.exe"文件。从技术上讲,应用程序是一个可执行文件,包含一组告诉CPU如何运行它的指令。
当启动一个应用程序时,可执行文件中的代码指导CPU执行什么操作。
2. 进程
2.1 什么是进程
往简单的讲,进程就是一个正在运行的应用程序。一个应用程序是由一系列指令组成,这些指令由CPU按顺序执行。
这种持续的执行被称为进程,即CPU处于执行该程序指令的过程。
当启动一个应用程序的时候,操作系统会执行一些动作,让应用程序转换为进程:
- 将执行文件加载到内存中,操作系统会为该应用程序分配内存空间,这个内存空间是应用程序独立操作的地方。
- 操作系统通过进程控制块(PCB),保存进程运行过程中的所有内容(称为进程状态)
2.2 操作系统中进程相关的信息
操作系统为应用程序分配的内存空间,由如下几个区域组成:
- Text区域:存放应用程序的指令
- Data区域:存放固定数据,如全局变量和常量
- Heap区域:存放运行时创建的动态数据
- Stack区域:跟踪函数调用和临时执行数据
进程状态:不仅包括内存限制,还包括进程打开了哪些文件,正在与哪些硬件设备通信,调度优先级,对派生线程的引用等信息。进程状态帮助操作系统管理整个进程。