多进程和多线程的区别

多线程和多进程的区别(重点 必须从cpu调度,上下文切换,数据共享,多核cup利用率,资源占用,等等各方面回答,然后有一个问题必须会被问到:哪些东西是一个线程私有的?答案中必须包含寄存器,否则悲催)

  区别的意思是优缺点吧。 
   
  多线程:

  • 高效的内存共享,数据共享
  • 较轻的上下文切换开销,不用切换地址空间,不用更改CR3寄存器,不用清空TLB。
  • 创建销毁切换比较简单

    多进程:

  • 更强的容错性,不会一阻全阻,一个进程崩溃不会整个系统崩溃。

  • 更好的多核伸缩性,进程的使用将许多内核资源(如地址空间,页表,打开的文件)隔离,在多核系统上的可伸缩性强于多线程程序

    在多核利用率上,多进程和多线程同样可以提高多核利用率。 
    其实对于创建和销毁,上下文切换,其实在Linux系统下差别不大,Window下有较大差别。 
    综上,多进程和多线程的最主要的区别就在资源共享,隔离问题。如果工作使用的内存较大,使用多线程可以避免CPU cache的换入换出,影响性能。

    线程私有

  • ID,每个线程都有自己的ID作为进程中唯一的表述。

  • 一组寄存器值,用来保存状态
  • 各自的堆栈
  • 错误返回码,防止错误还未被处理就被其他线程修改。
  • 信号屏蔽码,每个线程感兴趣的信号不同。
  • 优先级
  • 共享的:进程的代码段,公有数据,进程打开的文件描述符,全局内存,进程的栈,堆内存等。

猜你喜欢

转载自blog.csdn.net/fly_as_tadpole/article/details/80305361