OS 執行緒相關知識點

2022-05-05 11:48:10 字數 3108 閱讀 6404

作業系統中引入程序的目的,是為了描述和實現多個程式的併發執行,以改善資源利用率以及提高系統吞吐量。

那為什麼還需要引入執行緒呢?下面我們先來回顧一下什麼是程序:

程序有兩個基本屬性:

·資源的擁有者:給每個程序分配一虛擬位址空間,儲存程序影像,控制一些資源(檔案、i/o裝置),有狀態、優先順序、排程。

·排程單位:程序是乙個執行軌跡。

這兩個屬性構成了程序併發執行的基礎。

因此使用程序來實現併發執行時,系統則必須完成以下操作:

建立程序:

當程序被建立時,系統要為它分配pcb表及其它必要的資源,如記憶體等。

撤銷程序:

當程序被撤消時,系統要收回這些資源及pcb表等,因此系統必須付出一定的開銷。

程序切換:

當程序執行時,程序的切換現象更會大量存在,由於要保留當前執行程序的cpu現場和為選中執行的程序重佈現場,更需較大的開銷。

缺點:時間空間開銷大,限制併發程度的提高

執行緒的引入目的:減少程序切換和建立開銷,提高執行效率和節省資源。

實現:將程序的資源申請和排程屬性分開。即程序作為資源的申請和擁有者,但不作為排程的基本單位,這樣,就產生了執行緒的概念。

執行緒:是程序中的乙個實體,是獨立排程和分派的基本單位

從下圖可以看出單執行緒程序和多執行緒程序的區別:

從上圖可以看出執行緒的一些基本性質:

執行緒是cpu執行的乙個基本單元,包括程式計數器、暫存器集和棧空間。

乙個執行緒與它的對等執行緒共享**段、資料段以及作業系統資源。

乙個傳統重量級的程序只有單個控制線程。

多執行緒程式設計的好處:

·響應度高:如果乙個互動程式採用多執行緒,那麼即使其部分阻塞或執行較冗長的操作,該程式仍能繼續執行,從而增加了對使用者的響應程度。例如,多執行緒web瀏覽器在用乙個執行緒裝入影象時,能通過另乙個執行緒與使用者互動。

·資源共享:執行緒預設共享它們所屬程序的記憶體和資源。**和資料共享的優點是它能允許乙個應用程式在同一位址空間有多個不同的活動執行緒。

·經濟:程序建立所需的記憶體和資源的分配比較昂貴。由於執行緒能共享它們所屬程序的資源,所以建立和切換執行緒會更為經濟。

·多處理器體系結構的利用:多執行緒的優點之一是能充分使用多處理器體系結構,以便每個程序能並行執行在不同處理器上。不管有多少cpu,單執行緒程序只能執行在乙個cpu上。在多cpu上使用多執行緒加強了併發功能。

使用者級執行緒和核心級執行緒區別:

·執行緒的排程與切換時間

使用者級執行緒的切換通常發生在乙個應用程序的多個執行緒之間,無須通過中斷進行os的核心,且切換規則也簡單,因此其切換速度特別快。而核心級執行緒的切換時間相對比較慢。

·系統呼叫

使用者級執行緒呼叫系統呼叫時,核心不知道使用者級執行緒的存在,只是當作是整個程序行為,使程序等待並排程另乙個程序執行,在核心完成系統呼叫而返回時,程序才能繼續執行。而核心級執行緒則以執行緒為單位進行排程,當執行緒排程系統呼叫時,核心將其作為執行緒的行為,因此阻塞該執行緒,可以排程該程序中的其他執行緒執行。

·執行緒執行時間

如果使用者設定了使用者級執行緒,系統呼叫是以程序為單位進行的,但隨著程序中線程數目的增加,每個執行緒得到的執行時間就少。而如果設定的是核心級執行緒,則排程以執行緒為單位,因此可以獲得良好的執行時間。

多執行緒問題

·系統呼叫fork()和exec()

如果程式中的乙個執行緒呼叫fork(),新程序會複製所有執行緒,還是單個執行緒?

case 1:如果fork()之後立即呼叫exec(),沒有必要複製所有執行緒。因為exec引數所指定的程式會替換整個過程。

case 2:不呼叫exec(),應該複製所有執行緒。

·取消

比如多執行緒併發執行搜尋資料庫,其中乙個獲取到結果,那麼其他的執行緒就可以取消。

實現執行緒取消有兩種方法:

(1)非同步取消:乙個執行緒立即終止目標執行緒。

(2)延遲取消:允許目標執行緒不斷地檢查它是否應終止,允許目標執行緒有機會以有序的方式終止自己。

·訊號處理

訊號在unix系統中用來通知程序某個特定的事件發生了。

訊號都具有相同的模式:

(1)訊號是由特定事件的發生所產生的。

(2)產生的訊號要傳送到程序。

(3)一旦傳送,訊號必須加以處理。

在單執行緒程式中訊號處理比較直接,訊號總是傳送給程序;但對於多程序程式,傳送訊號就比較複雜,因為程序可能有多個執行緒,因此,訊號傳送有以下選擇:

(1)傳送訊號到訊號所應用的程序。

(2)傳送訊號到程序內的每個執行緒。

(3)傳送訊號到程序內的某些固定執行緒。

(4)規定乙個特定執行緒以接收程序的所有訊號。

傳送訊號的方法依賴於產生訊號的型別。

·執行緒池

執行緒池的主要思想是在程序開始時建立一定數量的執行緒,並放入到池中以等待工作。當伺服器收到請求時,它會喚醒池中的乙個執行緒(如果有可用的執行緒),並將要處理的請求傳遞給它。一旦執行緒完成了服務,它會返回到池中再等待工作。如果池中沒有可用的執行緒,那麼伺服器會一直等待直到有空執行緒為止。

使用執行緒池的優點:

(1)通常用現有執行緒處理請求要比等待建立新的執行緒要快。

(2)執行緒池限制了在任何時候可用執行緒的數量。這對那些不能支援大量併發執行緒的系統非常重要。

·執行緒特定資料

允許每乙個執行緒有自己的資料副本。

·排程程式啟用

os模組相關知識點

import os print os.name 返回作業系統的名字,windows 返回 nt linux 返回 posix 注意該命令不帶括號。以下命令基本都帶括號 print os.getcwd 獲取當前工作的目錄 print os.listdir c users asus desktop 課題...

OS知識點總結

1.什麼是作業系統?os是使用者與硬體之間的介面,管理計算機的軟體和硬體資源。2.計算機的硬體包括 cpu 輸入輸出裝置 儲存器 匯流排等。程序是資源分配的獨立單位,程序有獨立的位址空間。是程式的一次執行,包含 和資料。執行緒是cpu排程的基本單位,執行緒使用父程序的資料空間,排程執行緒比排程程序更...

OS知識點小記

寫牛客題目時錯了的都記一下 1.響應比高者優先作業排程演算法是通過計算時間和周轉時間來實現的。感謝巨巨的部落格 一.先來先服務 fcfs 思想 從 公平 的角度思考。規則 按照作業 程序到達的先後順序。用於作業 程序排程 作業排程 考慮那個作業先到達 程序排程 考慮那個程序先到達 搶占 非搶占式的演...