多線程

什麼是多線程 

多線程是一個比較輕量級的方法來實現單個應用程序內多個代碼執行路徑。在系 統級別內,程序並排執行,系統分配到每個程序的執行時間是基於該程序的所需時間 和其他程序的所需時間來決定的。然而在每個應程序的內部,存在一個或多個執行線 程,它同時或在一個幾乎同時發生的方式裏執行不同的任務。系統本身管理這些執行 的線程,調度它們在可用的內核上運行,並在需要讓其他線程執行的時候搶先打斷它 們。 

從技術角度來看,一個線程就是一個需要管理執行代碼的內核級和應用級數據結 構組合。內核級結構協助調度線程事件,並搶佔式調度一個線程到可用的內核之上。 應用級結構包括用於存儲函數調用的調用堆棧和應用程序需要管理和操作線程屬性 和狀態的結構。

在非併發的應用程序,只有一個執行線程。該線程開始和結束於你應用程序的main 循環,一個個方法和函數的分支構成了你整個應用程序的所有行爲。與此相反, 支持併發的應用程序開始可以在需要額外的執行路徑時候創建一個或多個線程。每個 新的執行路徑有它自己獨立於應用程序 main 循環的定製開始循環。在應用程序中存 在多個線程提供了兩個非常重要的的潛在優勢:

多個線程可以提高應用程序的感知響應。
多個線程可以提高應用程序在多核系統上的實時性能。 如果你的應用程序只有單獨的線程,那麼該獨立程序需要完成所有的事情。它必

須對事件作出響應,更新您的應用程序的窗口,並執行所有實現你應用程序行爲需要 的計算。擁有單獨線程的主要問題是在同一時間裏面它只能執行一個任務。那麼當你 的應用程序需要很長時間才能完成的時候會發生什麼呢?當你的代碼忙於計算你所

2011-11-28 | 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [2]

Threading Programming Guide

需要的值的時候,你的程序就會停止響應用戶事件和更新它的窗口。如果這樣的情況 持續足夠長的時間,用戶就會誤認爲你的程序被掛起了,並試圖強制退出。如果你把 你的計算任務轉移到一個獨立的線程裏面,那麼你的應用程序主線程就可以自由並及 時響應用戶的交互。

當然多線程並不是解決程序性能問題的靈丹妙藥。多線程帶來好處同時也伴隨着 潛在問題。應用程序內擁有多個可執行路徑,會給你的代碼增加更多的複雜性。每個 線程需要和其他線程協調其行爲,以防止它破壞應用程序的狀態信息。因爲應用程序 內的多個線程共享內存空間,它們訪問相同的數據結構。如果兩個線程試圖同時處理 相同的數據結構,一個線程有可能覆蓋另外線程的改動導致破壞該數據結構。即使有 適當的保護,你仍然要注意由於編譯器的優化導致給你代碼產生很微妙的(和不那麼 微妙)的 Bug。 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章