使用者执行绪.ppt
文本预览下载声明
第四章 執行緒Threads 綜觀 多重執行緒模型(Multithreading Models) 執行緒的相關問題 Pthreads Solaris 2 Threads Windows 2000 Threads Linux Threads Java Threads 執行緒 系統呼叫 fork() 的缺點 需要做大量記憶體的複製 進行內容切換時需付出相當的代價 兩個行程間無法直接進行溝通 若行程間可以共用一部分的記憶體空間,那麼額外的負擔就能減少,這也就是建立執行緒的基本理由。 許多在桌上型PC執行的套裝軟體都是多執行緒。應用程式通常都製作成有許多執行緒控制的個別行程。網頁瀏覽器可能有一個執行緒顯示影像或文字,而另一執行緒則從網路擷取資料。文書處理器可能有一個執行緒在顯示圖形,另一個執行緒從使用者讀入按鍵,而第三個執行緒在背景下執行拼字和文法校正。 執行緒觀念 執行緒 輕量級行程 使用 CPU 資源的基本單元 包含了一個程式計數器、一組暫存器和一個堆疊空間 與其他的執行緒共用同一個位址空間 傳統的行程 重量級行程 可看成是只有一個執行緒在執行的行程 傳統行程與執行緒行程 單一及多重執行緒的行程 優點 應答: 將交談式的應用程式多執行緒化,可以在一個程式某一部份被暫停,或程式在執行冗長操作時,依然桂續執行,因此增加了對使用者的應答。 資源分享: 執行緒間將共用它們所屬行程的記憶體和資源。程式碼和資料共用的好處是讓應用程式有數個不同的執行緒在同一位址空間活動。 經濟: 對於行程產生所配置的記憶體和資源耗費很大。反之,因為執行緒共用它們所屬行程的資源,所以執行緒的產生和內容交換就比較經濟。憑經驗去測量出產生和維護行程比執行緒多出多少時間可能很困難,但通常產生和維護行程會比執行緒更費時。 使用多處理器架構: 在多處理器的架構下,多執行緒的利益可以大幅提升,因為每一執行緒可以並行地在不同的處理器上執行。不論有多少CPU可以使用,單一執行緒只能在一個CPU上執行。多處理器上並行增加多執行緒。 使用者和核心執行緒 在作業系統中,有兩種方式來支援執行緒 使用者執行緒 利用執行緒函式庫來提供的 建立與管理執行緒時比較有效率 若行程中的執行緒暫停,則同行程中其他所有執行緒也都會暫停執行 核心執行緒 由作業系統直接支援 建立與管理執行緒時比使用者執行緒來得慢 若行程中的執行緒暫停,核心可以安排其他在同行程中的執行緒繼續執行 使用者執行緒(User Threads) 執行緒的管理由使用者層次的執行緒程式庫來完成 使用者執行緒是依附在行程內,所以中央處理器排程器仍以行程為單位進行排程及環境切換工作,當某一個行程輪到中央處理器時,它將它所輪到的時間分享給它的執行緒使用,例如時間片段為100ms,故某個行程分配100ms時間,而它有五個執行緒,則每個執行緒分配20ms執行。 範例 - POSIX Pthreads - Mach C-threads - Solaris threads 核心執行緒Kernel Threads 由作業系統核心支援 由於每個核心執行緒是各自排程,所以核心行程內若某一個執行緒懸置,它不會造成其他的執行緒被懸置。 範例 - Windows 95/98/NT/2000 - Solaris - Tru64 UNIX - BeOS - Linux Multithreading Models多執行緒模式 多對一(Many-to-One)將許多個使用者執行緒對應到同一個核心執行緒。 一對一(One-to-One)將一個使用者執行緒對應到一個核心執行緒。 多對多(Many-to-Many)將使用者執行緒對應到相同或是較少數目的核心執行緒。 多對一Many-to-One 許多使用者層次的執行緒對應到一個單一的核心執行緒. 通常使用在不支援核心執行緒的作業系統. 多對一模式 一對一 每個使用者執行緒對應到核心執行緒Each user-level thread maps to kernel thread. 範例 - Windows 95/98/NT/2000 - OS/2 一對一模式 多對多模式 允許多個使用者層執行緒可以對應到許多核心執行緒. 允許作業系統產生足夠數目的核心執行緒. Solaris 2 Windows NT/2000 with the ThreadFiber package 多對多模式 執行緒的問題 fork()及exec() 的系統呼叫問題. 執行緒的取消(Thread cancellation). 訊號處理(Signal handling) 執行緒池(Thread pools) 執行緒相關特定資料Thread specific data Pthreads Pthreads依據POS以
显示全部