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


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

進程內所有線程共享進程資源

 

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

     

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

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

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