进程和线程,这两个名字那么相似,那么它们之间的区别是什么?
先来分别认识一下进程和线程,再进行比较它们之间的差异吧~
关于进程(process),有三种典型的说法来解释它:
在传统的操作系统(OS)中,进程定义为:”进程是程序的执行过程,是系统进行资源分配和调度的一个独立单位。“
动态性
进程的实质就是程序的执行,这是动态的;
进程由创建而产生,由调度而执行,由撤销而消亡,这是动态的另一个方面。
并发性
进程之间是可以并发的。
还记得我前面的文章描述的并行和并发吗?不记得的话建议去翻翻我的博客操作系统这篇文章,可以自行点入链接查看。
独立性
独立性是指进程能够独立获得资源、独立运行和接受调度。注意,这里描述的是传统的进程。
异步性*
为了提高程序并发执行的程度,以进一步改善系统的服务质量,人们提出了比进程更小的单位——线程(thread)。
当你用打开QQ聊天框时,你想和朋友文字聊天,同时又想打开摄像头,还想语音聊天......这时,就需要创建多个进程来满足文字聊天、打开摄像头和语音聊天的需求,实现三者并发。但是,这样做会极大浪费资源,进程里面很多资源就空闲起来了,而且很耗费内存。所以人们就想,能不能创建一个进程,也能实现这三者并发呢?于是就出现了线程。
进程里面可以有多个线程。下图是进程和线程之间的关系:
引进了线程的概念后,进程的工作任务就发生了改变:现在的进程(区别于传统的进程)是拥有资源的基本单位;线程则是作为调度和分派的基本单位。
很显然,线程是将传统的进程的工作进行了细分。传统的进程既要负责资源的管理,还要负责调度和分派资源;而现在的进程,它只需要负责管理资源就可以了,调度和分派资源的事儿就交给了线程。
相信现在,你也弄明白了线程是怎么一回事儿了~
现在,进入到我们的重点——进程和线程的比较
调度
传统OS(操作系统)中,进程作为独立调度和分派的基本单位;
在引入线程的OS中,将线程作为调度和分派的基本单位。
并发性
拥有资源
系统开销
[1] 汤小丹,王红玲,姜华,汤子瀛;《计算机操作系统》;人民邮电出版社