很多情況下我們會遇到編程模型選擇的問題:多進(jìn)程 or 多線程 ? 下面簡要介紹下兩者區(qū)別:


多進(jìn)程多線程
資源進(jìn)程是資源分配的基本單位,獨占用整個進(jìn)程所有資源

進(jìn)程內(nèi)所有線程共享進(jìn)程資源

 

通信需要借助共享內(nèi)存、管道、信號量、socket等方式實現(xiàn)由于線程資源共享,很容易實現(xiàn)各線程間消息通信
編程編程調(diào)試簡單,可靠性高,創(chuàng)建銷毀系統(tǒng)開銷大CPU調(diào)度的基本單位,切換速度快,資源訪問互斥、同步導(dǎo)致編程復(fù)雜度增加,同時也不方便調(diào)試
信號每個進(jìn)程獨立控制信號進(jìn)程內(nèi)所有線程共享信號處理函數(shù),除了SIGSEGV,SIGALRM這樣的信號會直接發(fā)送給調(diào)用線程,其余的信號都默認(rèn)交給主線程。信號處理邏輯復(fù)雜

     

     上面表格中寫出了多線程、多進(jìn)程的基本區(qū)別,除了上述內(nèi)容我們還有一些需要關(guān)注的點:

  1. 由于所有線程共享進(jìn)程的資源,因此所有線程能夠打開的最大文件描述符數(shù)(包含socket)之和等于進(jìn)程支持的最大文件描述符數(shù);所有線程棧(默認(rèn)8MB)大小的總和等于進(jìn)程訪問的最大地址空間,因此如果線程創(chuàng)建了一個超大的局部數(shù)組或者其他結(jié)構(gòu),可能會導(dǎo)致所有線程所占的地址空間總和超出進(jìn)程地址空間的范圍進(jìn)而觸發(fā)SIGSEGV段錯誤,致使整個程序崩潰。

  2. 多線程的優(yōu)勢在于共享進(jìn)程中的全局資源以及堆區(qū)資源,極大方便了各個線程間信息的交換;在帶來方便的同時,為了保

    網(wǎng)友評論