多线程和多进程的区别(重点 必须从cpu调度,上下文切换,数据共享,多核cup利用率,资源占用,等等各方面回答,然后有一个问题必须会被问到:哪些东西是一个线程私有的?答案中必须包含寄存器,否则悲催)
区别的意思是优缺点吧。
多线程:
- 高效的内存共享,数据共享
- 较轻的上下文切换开销,不用切换地址空间,不用更改CR3寄存器,不用清空TLB。
创建销毁切换比较简单
多进程:
更强的容错性,不会一阻全阻,一个进程崩溃不会整个系统崩溃。
更好的多核伸缩性,进程的使用将许多内核资源(如地址空间,页表,打开的文件)隔离,在多核系统上的可伸缩性强于多线程程序
在多核利用率上,多进程和多线程同样可以提高多核利用率。
其实对于创建和销毁,上下文切换,其实在Linux系统下差别不大,Window下有较大差别。
综上,多进程和多线程的最主要的区别就在资源共享,隔离问题。如果工作使用的内存较大,使用多线程可以避免CPU cache的换入换出,影响性能。线程私有
ID,每个线程都有自己的ID作为进程中唯一的表述。
- 一组寄存器值,用来保存状态
- 各自的堆栈
- 错误返回码,防止错误还未被处理就被其他线程修改。
- 信号屏蔽码,每个线程感兴趣的信号不同。
- 优先级
- 共享的:进程的代码段,公有数据,进程打开的文件描述符,全局内存,进程的栈,堆内存等。