程序和執行緒的區別與聯絡

2021-08-21 13:06:27 字數 1043 閱讀 3747

1. 共同點

功能上都是用於實現多工併發程式設計的技術手段,執行緒的狀態包括就緒、執行與阻塞,與程序類似。

從系統實現的角度看,程序實體和執行緒實體在linux核心中都是有task_struct實現的,兩者的建立最終都是呼叫系統函式clone(),

2. 區別

程序是資源分配的基本單位,執行緒是系統排程的基本單位,程序維護資源,執行緒是真正的執行體。

同時,無論是程序實體還是執行緒實體,都是用linux核心中的程序控制表(process table)中的表項task_struct表示的。

(ps:這裡解釋一下process table,它的每一項都是task_struct結構,其物理實現是包含多個指標的靜態陣列,大小固定,所以核心有最大程序數。)

只是對於執行緒來說,其task_struct中的 tgid(thread group identifier)是主線程中的tgid,而主線程的tgid就是其自身的pid。

(clone_vm、clone_fs、clone_files、clone_sighand、clone_thread、clone_sysvsem引數表示與父程序共享記憶體空間、檔案系統、檔案描述符,訊號處理程式表和訊號量列表。)

執行緒建立呼叫clone():

clone(child_stack=0xb7597424, flags=clone_vm|clone_fs|clone_files|clone_sighand|clone_thread|clone_sysvsem|clone_settls|clone_parent_settid|clone_child_cleartid, parent_tidptr=0xb7597ba8, , child_tidptr=0xb7597ba8)
程序建立呼叫clone():

clone(child_stack=0, flags=clone_child_cleartid|clone_child_settid|sigchld, child_tidptr=0xb755a768)

程序與執行緒的區別和聯絡

一 程式與程序 程式 一段靜態的 程序 程式的一次動態執行過程 二 程序與執行緒 程序 程序是程序實體 程式段 資料段 pcb 的執行過程,是系統進行資源分配和排程的乙個獨立單位 執行緒 又稱輕量級程序 lightweight process 是程序中某個單一順序的控制流 三 程序與執行緒的區別 2...

程序與執行緒的區別聯絡

自 對於執行緒,程序的概念一直都是比較模糊,最近整理了一下。總結起來就是,執行緒是程序的一部分,程序是程式的一部分。這個說法不準確,但是可以指出期間的差別 程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的乙個獨立單位.執行緒是程序的乙個實體,是cpu排程和...

Linux程序與執行緒的區別和聯絡

1 兩者區別 1 程序是比較大的單位,乙個程序可以有多個執行緒,乙個執行緒只能被乙個程序擁有。2 程序是資源分配的基本單位,執行緒是處理機制排程的最小單位,所有的執行緒共享其所屬程序的所有資源與 3 執行緒執行過程中容易同步,而程序之間需要通訊進行同步。4 執行緒共享程序資料的同時,擁有自己的堆與棧...