最近在学习计算机体系结构的时候接触到了进程、线程的概念,所以写了这篇文章来记录一下
进程
定义
进程是一个应用程序被操作系统拉起来加载到内存之后从开始执行到执行结束的这样一个过程。简单的来理解:打开一个应用程序就是进程,比如浏览器、微信、网易云音乐,都是一个个进程。
属性
- 是获取资源的独立单位(比如内存、时间片),意味着进程之间的资源是不共享的
- 独立调度和分配
- 进程在创建、撤销和切换操作下,系统将会付出很大的资源代价消耗。通俗的讲,我们把微信切换到后台,打开浏览器的这个操作,计算机其实要做很多事情
- 进程本身并不能获取CPU时间,只有它的线程才可以
线程
定义
线程的概念,是在进程之下的。线程是应用程序/进程的底层实体。
属性
- 进程至少必须有一个线程,通常将此线程称为主线程
- 同属一个进程的线程之间是可以共享资源的。这里要注意,并非所有的内容都是共享的,实际上,有些区域,一次只能由一个线程操作,其余线程需要等待
- 同一个进程中的多个线程可以并发执行
多线程就是一个应用程序/进程,同时执行多个小的部分。实现“分工合作”的思想来完成一个工作。
进程、线程和CPU的关系
任一时刻,CPU总是只运行一个进程,其他进程处于非运行状态。线程是CPU调度和分配的基本单位。这就好像我们在调用函数的时候,要把手头的一切内容先存起来,我们知道,函数调用的开销很大,在这里,引伸到进程,不同进程之间的切换,开销也是巨大的。
一个不太准确但直观的比喻:
CPU = 工厂
进程 = 一种产品的生产流水线
线程 = 工人