1. 程式人生 > >1.1多線程基礎

1.1多線程基礎

操作系統 dia 我認 nbsp 正在執行 同時 ron 線程池 切換

我認為在使用多線編程之前,了解下面的基本術語,對我們是有些幫助的。

進程是給定程序當前正在執行的實例;操作系統的一個基本功能就是管理進程。每個進程都包含一個或多個線程。進程由System.Diagnostics命名空間的Process類的實例表示。

單線程程序是僅包含一個線程的進程。多線程程序的進程則包含兩個或更多的線程。

在多線程程序中運行時具有正確的表現,就說是線程安全的。代碼的線程處理模型是指代碼向調用者提出的一系列要求,只有保證這些要求才能保障線程安全。例如,許多類的線程處理模型都是“可以從任意線程調用靜態方法,但實例方法僅能從分配實例的線程調用”。

任務

是可能有高延遲的工作單元,目的是生成一個結果值,或產生想要的效果。任務和線程的區別是:任務代表需要執行的作業,而線程代表做這個作業的工作者。任務有Task類的實例表示。生成給定類型的值的任務由Task<T>類表示,後者從非泛型的Task類型派生。它們都在System.Threading.Tasks命名空間中。

線程池是多個線程的集合,也是決定如何向線程分配工作的邏輯。有任務要執行時,它分配線程池中的一個工作者線程執行任務,並在任務結束後解除分配。

多線程處理的目的和方式:

多線程處理主要用於兩個方面:實現多任務和解決延遲。

如果有足夠的內核使得每個線程都能分配到一個內核,那麽每個線程就就都使用了它們各自的CPU。然而,現實是線程數遠大於內核數。為了解決這個問題,OS通過時間分片

(time slicing)的機制來模擬多個線程並發運行。OS以極快的速度從一個線程切換到另一個線程,給人的感覺就是所有的線程都在同時執行。處理器在切換到下一個線程執行,執行一個特定線程的時間周期稱為時間片(time slice)/量子(quantum)。在一個給定的內核中改換執行線程的動作稱為上下文切換

無論是真正的多核並行運行,還是使用時間片技術來模擬,我們說“一起”進行的多個操作是並發的。為了實現這種並發的操作,需要以異步方式調用它,被調用操作的開始與結束都獨立於調用它的控制流。異步分配的工作與當前控制流並行執行,就實現類並發性。並行編程是將一個問題分解成較小的部分,並異步地發起對每個部分的處理,使它們能並發執行。

1.1多線程基礎