多線程和定時器之間的關系


多線程和定時器之間的關系 

總結:
    1、並行和串行說
         多線程更像並行
         定時器實際是串行
    2、缺點
         多線程因為競搶資源,會造線程鎖死
         定時器會造成UI堵塞,因為並非真正的多線程
    3、多線程是“同時”執行的多任務
         定時器更像是本線程插入的任務


1 軟件定時器
很多同學在工程中喜歡使用軟件定時器,因為其使用簡單,僅需設置一個時長和其OnTime事件即可使用。確實,軟件定時器在某些持續性不強的重復性工作中效率還是不錯的,但是也有着很大的缺點。
缺點1,速度:軟件定時器的精度比較低,這是由Windows不實時的特性所決定的,在XP下,如果關閉所有能關閉的進程,MFC的軟件定時器可以達到接近15ms的精度,而在Win2000下,其能達到接近10ms的精度。但是實際情況是,有些進程是不可以關閉的,比如說數據庫服務器,所以MFC的軟件定時器能夠達到的精度一般情況下在40ms左右,BCB和delphi就更差一點,大概在55ms左右。QueryPerformanceCounter倒是可以大幅提高精度,但是穩定性欠佳。
缺點2,效率:軟件定時器其本質實際上是在消息循環中處理WM_TIMER消息,而WM_TIMER消息在消息隊列中是一個低級別的消息,所以定時器並不能完全保證處理時間間隔的准確性。另外,Timer占用的是主線程的資源,看似並行實際上是串行,所以窗體的消息隊列一旦堵塞,就會造成系統假死或者運行緩慢,這對於UI來說幾乎是無法忍受的。
2 多線程
多線程技術是在控制工程中常用的技術,因為在閉環系統中有着大量的數據處理,這些處理顯然不可能放在主線程中處理,絕大多數都是在線程中使用。多線程的優點比較明顯,就是把費勁的東西扔到后台去,而且對CPU的利用率比較高。如果控制的好,多線程幾乎是沒有什么缺點的,但實際上控制的好的並不多……原因如下:
1、時間片不可控,搶CPU資源的事情~一般人說不清;
2、同步比較復雜,容易發生死鎖,3條線程同步一般就能把人折騰死。同步我比較喜歡用臨界區,原因也很簡單:因為臨界區比較簡單……
 
 
多個線程是“同時”執行的多個任務;定時可以看作是在本線程內插入的任務。
如果需要多個任務同時執行,就要用多線程;如果需要每隔一段時間做某件事就用定時。多線程相對復雜一些,占用系統資源略多一些,所以如果能不用多線程時盡量不用。 





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM