[关闭]
@wangjialin 2017-03-22T22:35:47.000000Z 字数 1143 阅读 1162

进程和线程的区别

os

进程

假如没有进程,想要提高CPU的利用率,实现并发的话就只能在编写每一个程序的时候都要考虑,程序执行的时候该占用多大的内存,写数据的时候会不会互相影响,该怎么扩充其占用的内存空间,内存碎片怎么处理,堵塞该怎么让出CPU等等这些问题,非常复杂,因此引入了进程的概念。

线程

当用多个进程完成一项任务的时候,往往他们之间需要相互合作,需要共享数据和通信,但是由于进程有独立的地址空间,所以进程之间通信比较麻烦,只能通过管道等方法而不能共享变量;由于进程有独立的地址空间,所以进程切换的时候不仅需要保存相关寄存器和栈等还需要进行切换页表,开销比较大;为了进一步提高并发性以及CPU的利用率,在进程内又引入了线程,没有自己的地址空间,共享进程的资源。

因此引入线程之后就可以说,进程是CPU进行资源分配的基本单位,线程是CPU进行调度的基本单位

总结进程线程区别

  1. 由于进程拥有独立的地址空间,所以进程间存在内存隔离,数据是分开的,共享复杂但是同步简单;而线程之间没有内存隔离,资源共享,数据共享简单但是同步复杂
  2. 由于进程拥有独立的地址空间,所以一个进程挂掉不会影响其他进程,不影响主程序的稳定性,可靠性高;而一个线程崩溃可能影响到整个程序的稳定性,可靠性较低
  3. 由于进程拥有独立的地址空间,所以进程间创建销毁切换不仅需要保存寄存器和栈信息还需要资源分配和回收以及页调度,开销比较大;而线程只需要保存寄存器和栈信息,开销比较小

进程和线程的最大区别就在于是否占有独立的地址空间,而这个区别也为他们带来了各自的优点和缺点。进程可靠性高但是开销大,线程开销小但是可靠性低。这样讲的话其实两个是互补的关系,根据实际开发情况的不同可以选择不同的模型。综合2、3,所以在一些需要并发处理并且需要共享一些变量的情况下,选择线程;其他情况下,进程的健壮性相对更好

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注