進程和線程


進程和線程

進程就是為了在CPU上實現多道編程而提出的。

有了進程為什麼還要線程?

進程還是有很多缺陷的,主要體現在兩點上:

  1. 進程只能在一個時間幹一件事,如果想同時幹兩件事或多件事,進程就無能為力了。
  2. 進程在執行的過程中如果阻塞,例如等待輸入,整個進程就會掛起,即使進程中有些工作不依賴於輸入的數據,也將無法執行。

線程的優點

除了提高進程的併發度,線程還有個好處,就是可以有效地利用多處理器和多核計算機。

在沒有線程之前,多核並不能讓一個進程的執行速度提高,原因還是上面所有的兩點限制。但如果將一個進程分解為若干個線程,則可以讓不同的線程運行在不同的核上,從而提高了進程的執行速度。

例如:我們經常使用微軟的Word進行文字排版,實際上就打開了多個線程。這些線程一個負責顯示,一個接受鍵盤的輸入,一個進行存盤等等。這些線程一起運行,讓我們感覺到我們輸入和屏幕顯示同時發生,而不是輸入一些字符,過一段時間才能看到顯示出來。在我們不經意間,還進行了自動存盤操作。這就是線程給我們帶來的方便之處。

進程與線程的區別

進程是具有一定獨立功能的程序關於某個數據集合上的一次運行活動,是系統進行資源分配和調度的一個獨立單位。

線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源。

進程和線程的主要差別在於它們是不同的操作系統資源管理方式。

進程有獨立的地址空間,一個進程崩潰後,在保護模式下不會對其它進程產生影響。

而線程只是一個進程中的不同執行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等於整個進程死掉。

所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行並且又要共享某些變量的併發操作,只能用線程,不能用進程。


分享到:


相關文章: