进程和线程,这两个名字那么相似,那么它们之间的区别是什么?

先来分别认识一下进程和线程,再进行比较它们之间的差异吧~

进程

关于进程(process),有三种典型的说法来解释它:

  • 进程是程序的一次执行;
  • 进程是一个程序及其数据在处理机上顺序执行时所发生的活动;
  • 进程是具有独立功能的程序在一个数据集上执行的过程,它是系统进行资源分配和调度的一个独立单位。

在传统的操作系统(OS)中,进程定义为:”进程是程序的执行过程,是系统进行资源分配和调度的一个独立单位。“

传统的进程的特征

  1. 动态性
    进程的实质就是程序的执行,这是动态的;
    进程由创建而产生,由调度而执行,由撤销而消亡,这是动态的另一个方面。
  2. 并发性
    进程之间是可以并发的。
    还记得我前面的文章描述的并行和并发吗?不记得的话建议去翻翻我的博客操作系统这篇文章,可以自行点入链接查看。
  3. 独立性
    独立性是指进程能够独立获得资源、独立运行和接受调度。注意,这里描述的是传统的进程。
  4. 异步性*

区分进程和程序

  • 进程是程序的一个实例,是程序的一次执行;
  • 程序是进程的代码部分
  • 进程是运动的,程序是静止
  • 进程在内存中,程序在外存中。

线程

为了提高程序并发执行的程度,以进一步改善系统的服务质量,人们提出了比进程更小的单位——线程(thread)。

当你用打开QQ聊天框时,你想和朋友文字聊天,同时又想打开摄像头,还想语音聊天......这时,就需要创建多个进程来满足文字聊天、打开摄像头和语音聊天的需求,实现三者并发。但是,这样做会极大浪费资源,进程里面很多资源就空闲起来了,而且很耗费内存。所以人们就想,能不能创建一个进程,也能实现这三者并发呢?于是就出现了线程。

进程里面可以有多个线程。下图是进程和线程之间的关系

进程和线程的比较_操作系统

引进了线程的概念后,进程的工作任务就发生了改变:现在的进程(区别于传统的进程)是拥有资源的基本单位线程则是作为调度和分派的基本单位

很显然,线程是将传统的进程的工作进行了细分。传统的进程既要负责资源的管理,还要负责调度和分派资源;而现在的进程,它只需要负责管理资源就可以了,调度和分派资源的事儿就交给了线程。

相信现在,你也弄明白了线程是怎么一回事儿了~

现在,进入到我们的重点——进程和线程的比较

进程和线程的比较

  1. 调度
  • 传统OS(操作系统)中,进程作为独立调度和分派的基本单位;
  • 在引入线程的OS中,将线程作为调度和分派的基本单位
  1. 并发性
  • 传统OS中,只有进程间可以并发;
  • 引入线程的OS中,进程之间可以并发执行,多个线程之间可以并发执行,不同进程中的线程也能并发执行。
  1. 拥有资源
  • 进程可以拥有资源,并可作为系统拥有资源的一个基本单位;
  • 线程除必不可少的一点儿资源确保自身能够独立运行,几乎不拥有资源;
  • 允许多个线程共享它们共属的进程所拥有的资源。
  1. 系统开销
  • 进程创建/撤销付出的开销远大于线程创建/撤销时所付出的开销;
  • 线程的切换代价远低于进程;
  • 线程之间的同步和通信也比进程简单。

参考文献

[1] 汤小丹,王红玲,姜华,汤子瀛;《计算机操作系统》;人民邮电出版社