多进程和多线程的区别
生活随笔
收集整理的這篇文章主要介紹了
多进程和多线程的区别
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
多線程和多進(jìn)程的區(qū)別(重點 必須從cpu調(diào)度,上下文切換,數(shù)據(jù)共享,多核cup利用率,資源占用,等等各方面回答,然后有一個問題必須會被問到:哪些東西是一個線程私有的?答案中必須包含寄存器,否則悲催)
區(qū)別的意思是優(yōu)缺點吧。?
?
多線程:
- 高效的內(nèi)存共享,數(shù)據(jù)共享
- 較輕的上下文切換開銷,不用切換地址空間,不用更改CR3寄存器,不用清空TLB。
創(chuàng)建銷毀切換比較簡單
多進(jìn)程:
更強(qiáng)的容錯性,不會一阻全阻,一個進(jìn)程崩潰不會整個系統(tǒng)崩潰。
更好的多核伸縮性,進(jìn)程的使用將許多內(nèi)核資源(如地址空間,頁表,打開的文件)隔離,在多核系統(tǒng)上的可伸縮性強(qiáng)于多線程程序
在多核利用率上,多進(jìn)程和多線程同樣可以提高多核利用率。?
其實對于創(chuàng)建和銷毀,上下文切換,其實在Linux系統(tǒng)下差別不大,Window下有較大差別。?
綜上,多進(jìn)程和多線程的最主要的區(qū)別就在資源共享,隔離問題。如果工作使用的內(nèi)存較大,使用多線程可以避免CPU cache的換入換出,影響性能。線程私有
ID,每個線程都有自己的ID作為進(jìn)程中唯一的表述。
- 一組寄存器值,用來保存狀態(tài)
- 各自的堆棧
- 錯誤返回碼,防止錯誤還未被處理就被其他線程修改。
- 信號屏蔽碼,每個線程感興趣的信號不同。
- 優(yōu)先級
- 共享的:進(jìn)程的代碼段,公有數(shù)據(jù),進(jìn)程打開的文件描述符,全局內(nèi)存,進(jìn)程的棧,堆內(nèi)存等。
總結(jié)
以上是生活随笔為你收集整理的多进程和多线程的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 模型融合之stacking方法
- 下一篇: 系统进程间的同步机制