【Linux】進程與線程

什麼是進程呢?

Linux程序設計中是這樣定義的,進程是一個其中運行着一個或多個線程的地址空間和這些線程所需要的系統資源。即運行中的程序。也可以理解爲是一組有序指令、數據、和資源的集合。每個進程都有一個非負整型表示的唯-進程ID。 因爲進程ID標識符總是唯一的,常將其用其他標識符的-部分以保證其唯一性。 例如,應用程序有時就把進程ID作爲名字的一部分來創建-一個唯一的文件名。進程控制塊是進程存在的惟一標識,系統通過PCB的存在而感知進程的存在。進程控制塊,底層實現是雙循環鏈表。PCB裏有程序計數器、程序上下文、資源(文件、信號)等。

進程中有哪些結構?

進程中有代碼段、數據段、堆棧區域,也就是由程序、數據、進程控制PCB(Process Control Block)組成。進程控制塊是進程存在的惟一標識,系統通過PCB的存在而感知進程的存在。
PCB:進程控制塊,底層實現是雙循環鏈表。PCB裏有程序計數器、程序上下文、資源(文件、信號)

進程的狀態

  • 就緒:等待系統調度執行的進程。
  • 運行:在CPU上執行的進程。
  • 阻塞:進程被阻塞,直到等待的條件發生,纔將進程放入就緒隊列中。
  • 掛起:只要不喚醒,則永遠不被執行。

什麼又是線程呢?

在一個程序中的多個執行路線就叫做線程(thread)。 更準確的定義是:線程是.一個進程內部的一個控制序列。

線程和進程的區別

  • 進程是資源分配的最小單位,線程是cpu調度的最小單位或者是程序執行的最小單位;
  • 進程有獨立的地址空間,啓動一個新的進程,系統必須分配給它獨立的地址空間,建立衆多的數據表來維護它的代碼段、堆棧段和數據段。而運行一個進程中的線程,它們之間共享大部分數據,使用相同的地址空間,當然,線程是擁有自己的局部變量和堆棧;
  • 一個進程中可以包含多條線程,進程是一個獨立的執行個體,而線程是進程內部的執行序列。
  • 進程切換效率低,代價大;線程切換效率高,代價小。
  • 線程之間的通信比較方便。同一進程下的線程共享數據(比如全局變量,靜態變量),通過這些數據來通信不僅快捷而且方便,當然如何處理好這些訪問的同步與互斥正是編寫多線程程序的難點。而進程之間的通信只能通過進程通信的方式進行;
  • 線程的執行與進程是有區別的。每個獨立的線程有有自己的一個程序入口,順序執行序列和程序的出口,但是線程不能獨立執行。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章