進程與線程的聯(lián)系和區(qū)別?

1、線程的基本概念

概念:

線程是進程中執(zhí)行運算的最小單位,是進程中的一個實體,是被系統(tǒng)獨立調度和分派的基本單位,線程自己不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的全部資源。一個線程可以創(chuàng)建和撤消另一個線程,同一進程中的多個線程之間可以并發(fā)執(zhí)行。

好處 :

(1)易于調度。
(2)提高并發(fā)性。通過線程可方便有效地實現(xiàn)并發(fā)性。進程可創(chuàng)建多個線程來執(zhí)行同一程序的不同部分。
(3)開銷少。創(chuàng)建線程比創(chuàng)建進程要快,所需開銷很少。。
(4)利于充分發(fā)揮多處理器的功能。通過創(chuàng)建多線程進程,每個線程在一個處理器上運行,從而實現(xiàn)應用程序的并發(fā)性,使每個處理器都得到充分運行。

2、進程的基本狀態(tài)及狀態(tài)之間的關系

狀態(tài):運行、阻塞、掛起阻塞、就緒、掛起就緒

狀態(tài)之間的轉換:準備就緒的進程,被CPU調度執(zhí)行,變成運行態(tài);
運行中的進程,進行I/O請求或者不能得到所請求的資源,變成阻塞態(tài);
運行中的進程,進程執(zhí)行完畢(或時間片已到),變成就緒態(tài);
將阻塞態(tài)的進程掛起,變成掛起阻塞態(tài),當導致進程阻塞的I/O操作在用戶重啟進程前完成(稱之為喚醒),掛起阻塞態(tài)變成掛起就緒態(tài),當用戶在I/O操作結束之前重啟進程,掛起阻塞態(tài)變成阻塞態(tài);
將就緒(或運行)中的進程掛起,變成掛起就緒態(tài),當該進程恢復之后,掛起就緒態(tài)變成就緒態(tài);

3、線程和進程的關系以及區(qū)別?

進程和線程的關系:

(1)一個線程只能屬于一個進程,而一個進程可以有多個線程,但至少有一個線程。
(2)資源分配給進程,同一進程的所有線程共享該進程的所有資源。
(3)處理機分給線程,即真正在處理機上運行的是線程。
(4)線程在執(zhí)行過程中,需要協(xié)作同步。不同進程的線程間要利用消息通信的辦法實現(xiàn)同步。線程是指進程內的一個執(zhí)行單元,也是進程內的可調度實體.

進程與線程的區(qū)別:

(1)調度:線程作為調度和分配的基本單位,進程作為擁有資源的基本單位
(2)并發(fā)性:不僅進程之間可以并發(fā)執(zhí)行,同一個進程的多個線程之間也可并發(fā)執(zhí)行
(3)擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統(tǒng)資源,但可以訪問隸屬于進程的資源.
(4)系統(tǒng)開銷:在創(chuàng)建或撤消進程時,由于系統(tǒng)都要為之分配和回收資源,導致系統(tǒng)的開銷明顯大于創(chuàng)建或撤消線程時的開銷。

4、進程間通信的方式

(1)管道(pipe)及有名管道(named pipe):管道可用于具有親緣關系的父子進程間的通信,有名管道除了具有管道所具有的功能外,它還允許無親緣關系進程間的通信。

(2)信號(signal):信號是在軟件層次上對中斷機制的一種模擬,它是比較復雜的通信方式,用于通知進程有某事件發(fā)生,一個進程收到一個信號與處理器收到一個中斷請求效果上可以說是一致的。

(3)消息隊列(message queue):消息隊列是消息的鏈接表,它克服了上兩種通信方式中信號量有限的缺點,具有寫權限得進程可以按照一定得規(guī)則向消息隊列中添加新信息;對消息隊列有讀權限得進程則可以從消息隊列中讀取信息。

(4)共享內存(shared memory):可以說這是最有用的進程間通信方式。它使得多個進程可以訪問同一塊內存空間,不同進程可以及時看到對方進程中對共享內存中數(shù)據得更新。這種方式需要依靠某種同步操作,如互斥鎖和信號量等。

(5)信號量(semaphore):主要作為進程之間及同一種進程的不同線程之間得同步和互斥手段。

(6)套接字(socket):這是一種更為一般得進程間通信機制,它可用于網絡中不同機器之間的進程間通信,應用非常廣泛。

5、同步和互斥的區(qū)別:

當有多個線程的時候,經常需要去同步這些線程以訪問同一個數(shù)據或資源。例如,假設有一個程序,其中一個線程用于把文件讀到內存,而另一個線程用于統(tǒng)計文件中的字符數(shù)。當然,在把整個文件調入內存之前,統(tǒng)計它的計數(shù)是沒有意義的。但是,由于每個操作都有自己的線程,操作系統(tǒng)會把兩個線程當作是互不相干的任務分別執(zhí)行,這樣就可能在沒有把整個文件裝入內存時統(tǒng)計字數(shù)。為解決此問題,你必須使兩個線程同步工作。

所謂同步,是指散步在不同進程之間的若干程序片斷,它們的運行必須嚴格按照規(guī)定的某種先后次序來運行,這種先后次序依賴于要完成的特定的任務。如果用對資源的訪問來定義的話,同步是指在互斥的基礎上(大多數(shù)情況),通過其它機制實現(xiàn)訪問者對資源的有序訪問。在大多數(shù)情況下,同步已經實現(xiàn)了互斥,特別是所有寫入資源的情況必定是互斥的。少數(shù)情況是指可以允許多個訪問者同時訪問資源。

所謂互斥,是指散布在不同進程之間的若干程序片斷,當某個進程運行其中一個程序片段時,其它進程就不能運行它們之中的任一程序片段,只能等到該進程運行完這個程序片段后才可以運行。如果用對資源的訪問來定義的話,互斥某一資源同時只允許一個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 進程和線程 進程線程的區(qū)別1、進程是什么?是具有一定獨立功能的程序、它是系統(tǒng)進行資源分配和調度的一個獨立單位,重點...
    HeartGo閱讀 1,323評論 0 4
  • *進程**:程序的一次執(zhí)行,可理解為一個容器;**線程**:CPU的基本調度單位,也可理解為容器中的工作單位。 +...
    raincoco閱讀 297評論 0 0
  • 又來到了一個老生常談的問題,應用層軟件開發(fā)的程序員要不要了解和深入學習操作系統(tǒng)呢? 今天就這個問題開始,來談談操...
    tangsl閱讀 4,332評論 0 23
  • 本來一大堆話要說,點到這又不知道要說什么了。其實我也不知道喜不喜歡她,但是我很害怕失去她,心情好復雜!我發(fā)現(xiàn)我根本...
    潛泳的大鯊魚閱讀 179評論 0 0

友情鏈接更多精彩內容