java 進程和線程

進程:

      是一個正在執行的程序;計算機中正在運行的程序實例;可以分配給處理器並由處理器執行的一個實體

     進程的特點:

     每一個進程都有自己的獨立的一塊內存空間、一組資源系統。其內部數據和狀態都是完全獨立的。

       怎麼看待進程?

       進程的優點是提高CPU運行效率,在同一時間內執行多個程序,即併發執行。但是從嚴格上講,也不是絕對的同一時刻執行多個程序,只不過CPU在執行時通過時間片等調度算法不同進程高速切換。進程類似於人類,是被產生的,有或長或短的有效生命,可以產生一個或多個子進程,最終都要消亡的。每個子進程都只有一個父進程。在這裏順帶提下,Linux裏通過調用fork()函數產生子進程。子進程在創建時,它幾乎和父進程相同。它是從父進程的地址空間copy過來的。儘管它們可以共享有程序代碼的頁,但是它們各自有獨立的數據空間。對子進程內存的修改不會影響父進程,反之亦然。

    什麼是守護進程?

     在系統的引導的時候會開啓很多服務,這些服務就叫做守護進程,也叫後臺服務程序,它的生命週期較長,在系統關閉時終止。這個在linux中經常提到init進程,超級守護進程。

     線程的概念

     線程是指進程內的一個執行單元,也是進程內的可調度實體.一個線程是進程的一個順序執行流。

      同類的多個線程共享一塊內存空間和一組系統資源,線程本身的數據通常只有CPU的寄存器數據,以及一個供程序執行時的堆棧。線程在切換時負荷小,因此,線程也被稱爲輕負荷進程。一個進程中可以包含多個線程。

      與進程的區別:
(1)地址空間:進程內的一個執行單元;進程至少有一個線程;它們共享進程的地址空間;而進程有自己獨立的地址空間;
(2)資源擁有:進程是資源分配和擁有的單位,同一個進程內的線程共享進程的資源
(3)線程是處理器調度的基本單位,但進程不是.
(4)  二者均可併發執行.

      進程和線程都是由操作系統所體會的程序運行的基本單元,系統利用該基本單元實現系統對應用的併發性。進程和線程的區別在於:  簡而言之,一個程序至少有一個進程,一個進程至少有一個線程. 線程的劃分尺度小於進程,使得多線程程序的併發性高。
      另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。
      線程在執行過程中與進程還是有區別的。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。
      從邏輯角度來看,多線程的意義在於一個應用程序中,有多個執行部分可以同時執行。但操作系統並沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。

      進程是具有一定獨立功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位.
線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.
一個線程可以創建和撤銷另一個線程;同一個進程中的多個線程之間可以併發執行

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章