顯示具有 線程 標籤的文章。 顯示所有文章
顯示具有 線程 標籤的文章。 顯示所有文章

同步化物件


Synchronization Objects

一個 synchronization object 它的 handle 可以被指派到一個 wait functions 內來協調多個執行緒的執行.
多個處理程序可以共用一個同步物件的 handle 來達成處理程序之間的同步化.
以下為同步物件型別


型別描述
Event通知一個或多個正在等候的執行緒有事件已經被觸發,可以進行下一個動作.
更多資訊請參閱 Event Objects.
Mutex在同一個時間裡只有一個執行緒可以擁有, 讓執行緒之間相互協調在同一時間只有一個執行緒可以存取共用資源.
更多資訊請參閱 Mutex Objects.
Semaphore限制在同一時間可以存取共用資源的執行緒數量.
 更多資訊請參閱 Semaphore Objects.
Waitable timer通知一個或多個正在等候的執行緒指定的時間已到達.
更多資訊請參閱 Waitable Timer Objects.

撰寫多執行緒程式時為什麼要使用這些同步化物件 , 舉例來說
1. 當 多個執行緒同時讀寫一個檔案時若沒使用 同步化物件來安排存取順序時將造成資源衝突
2. 當多個執行緒在等待某一個資料進來時, 若是使用迴圈方式( for 或 while)  不斷的讀取將造成
    CPU使用率大幅升高 ,因此可以使用同步化物件把CPU時間讓出給其他執行緒使用,直到某一   個資料進來時觸發事件再進行下一步動作  

什麼是 Threads?為什麼要使用它?

什麼是 Threads?為什麼要使用它?


What are threads? Why use them?



歷史。

在早期電腦,所有程式基本上是單執行緒(single threaded)。您創建您的程式是藉由打孔卡或磁帶,提交您的紙牌給當地計算機中心,幾天後,您收到另一個紙牌,如果你是幸運的,所要求的結果。所有加工的一批重要的不是時間,先到先得,當你的程序運行,它已獨家使用計算機的時間。
事情已經提出。這個概念的多執行緒(multiple threads)第一次出現了共享系統,有超過一人可以登錄到一個中央主機電腦的一次。重要的是要確保處理時間的機器是相當分為所有用戶和操作系統的時間利用了“process”和“Thread”的概念。桌上型電腦看到了類似的進展。早期的DOS和Windows系統單任務(single tasking)。你的程式運行專門的機器,或根本沒有。日益複雜的應用程序,並不斷增加的需求在個人電腦上,特別是在高性能的圖形和網絡領域,多進程和多線程操作系統現在已是司空見慣。在電腦的多線程主要被使用的原因是,需要更好的性能和可用性

定義。

第一個概念的定義是 , 在 進程(process。大多數Windows 95,98和NT用戶有良好的直覺思想的過程是什麼。他們認為它的程序 , 可以在機器上運行,共存和共享CPU,磁盤和內存資源與其他程序。程序員都知道這個過程是一個調用的可執行代碼,這樣 , 該代碼有一個獨特的存在,並說明執行該過程在一個有序的執行方式。整體而言,執行過程中的孤立。他們使用的資源(內存,磁盤,I / O的CPU時間)的虛擬化,這樣的每一個進程都有自己的一套虛擬資源,觸及其他進程。該操作系統提供了這種虛擬技術。流程執行 模塊 的代碼。這可能是不相交的,在這個意義上說,可執行模塊的代碼 , 包括Windows資源管理器和Microsoft Word是不相交。不過,他們也可以共享,如案件DLL的。該代碼通常是一個DLL正在執行的範圍內 , 在許多不同的過程,往往同時進行。執行的指令是在整個進程之間沒有命令:Microsoft Word不停止打開文檔僅僅因為打印後台處理程序正在發送到打印機的東西!當然,在不同的過程相互作用,程序員必須對一個命令,一個中心問題將隨後闡述。
我們的下一個概念是 , 線程。線程被開發時 , 顯然 , 這是可取的應用程序的執行規定的行動更鬆散的時間排序的方式,可能是多套表演一次行動。在某些情況下的行動會造成相當大的延遲一個線程的執行(例如 : 等待用戶做什麼),這往往是可取的程序仍兼任執行其他操作(例如 , 後台拼寫檢查,或處理的傳入網絡消息)。不過,開銷創造一個全新的處理每個並行操作,然後有溝通的過程往往是太多的開銷。

一個例子。

如果我們要尋找一個很好的多線程例子,Windows 檔案總管(即Windows Shell))是一個很好的例子。當您去雙擊“我的電腦”,並通過點擊幾個子文件夾,創建新的視窗。現在一個窗口上執行複製操作。進度列彈出,以及特定的窗口不響應用戶輸入。但是,所有其它窗口還是可以動作。這就是多線程的本質。

時間截分

在大多數系統 , 支持多線程,可能有許多用戶同時請求作出的計算機系統。一般情況下 , 物理處理器數量在系統中是不到線程數可能並行運行。大多數系統的支持 時間截分,也稱為 先發製人的多任務( pre-emptive multitasking,為了解決這個問題。在一個系統 , 是時間切片,線程運行了一會兒,然後預設,即硬件計時器火災導致操作系統重新評估的主題應該怎樣經營,就可能停止執行當前正在運行的線程,並運行其他線程尚未執行最近。這使得即使是單一的處理器的機器上運行多個線程。基於PC的一時間片往往是對大約55毫秒長。



為什麼使用線程?

Threads不需改變一個程序的語法。它們只是改變時間的運作。因此,它們幾乎總是作為一個優雅的解決方案,性能相關的問題。下面是一些例子,在有些情況下可以使用線程:
  • 冗長的處理:當一個Windows應用程序是計算它不能處理任何更多的信息。因此,顯示器不能被更新。
  • 做後台處理:有些任務可能沒有時間重要,但需要一直執行下去。
  • 這樣做的I / O工作:I / O到磁盤或網絡可以有不可預知的延遲。線程允許您確保I / O延遲不延遲無關的部分應用程序。
所有這些例子有一個共同點:在程序中,某些操作可能招致大滯後或CPU佔用,但這種延誤或CPU使用率是不能接受的其他行動;他們需要服務的 現在。當然還有其他雜項福利,在這裡他們:
  • 製作使用多處理器系統:你不能指望一個應用程序只有一個線程利用兩個或多個處理器!
  • 高效時間分享:使用線程和進程優先級,可以確保每個人得到一個公平的分配CPU時間。
聰明的使用線程的曲折緩慢,笨重,不太響應程序到酥脆反應靈敏,高效,快捷的程序,並可以從根本上簡化各種性能和可用性問題。