天天看點

單線程(Thread)與多線程的差別

   首先了解一下cpu,随着主頻(cpu核心工作時鐘頻率,表示在CPU内數字脈沖信号震蕩的速度,等于外頻(系統基本時間)乘倍頻)的不斷攀升,X86構架的硬體逐漸成為瓶頸,最高為4G,事實上目前3.6G主頻的CPU已經接近頂峰。 

       多線程程式設計的目的,就是"最大限度地利用CPU資源",當某一線程的處理不需要占用CPU而隻和I/O,OEMBIOS等資源打交道時,讓需要占用CPU資源的其它線程有機會獲得CPU資源。每個程式執行時都會産生一個程序,而每一個程序至少要有一個主線程。這個線程其實是程序執行的一條線索,除了主線程外你還可以給程序增加其它的線程,也即增加其它的執行線索,由此在某種程度上可以看成是給一個應用程式增加了多任務功能。當程式運作後,您可以根據各種條件挂起或運作這些線程,尤其在多CPU的環境中,這些線程是并發運作的。多線程就是在一個程序内有多個線程。進而使一個應用程式有了多任務的功能。多程序技術也可以實作這一點,但是建立程序的高消耗(每個程序都有獨立的資料和代碼空間),程序之間通信的不友善(消息機制),程序切換的時間太長,這些導緻了多線程的提出,對于單CPU來說(沒有開啟超線程),在同一時間隻能執行一個線程,是以如果想實作多任務,那麼就隻能每個程序或線程獲得一個時間片,在某個時間片内,隻能一個線程執行,然後按照某種政策換其他線程執行。由于時間片很短,這樣給使用者的感覺是同時有好多線程在執行。但是線程切換是有代價的,是以如果采用多程序,那麼就需要将線程所隸屬的該程序所需要的記憶體進行切換,這時間代價是很多的。而線程切換代價就很少,線程是可以共享記憶體的。是以采用多線程在切換上花費的比多程序少得多。但是,線程切換還是需要時間消耗的,是以采用一個擁有兩個線程的程序執行所需要的時間比一個線程的程序執行兩次所需要的時間要多一些。即采用多線程不會提高程式的執行速度,反而會降低速度,但是對于使用者來說,可以減少使用者的響應時間。上述結果隻是針對單CPU,如果對于多CPU或者CPU采用超線程技術的話,采用多線程技術還是會提高程式的執行速度的。因為單線程隻會映射到一個CPU上,而多線程會映射到多個CPU上,超線程技術本質是多線程硬體化,是以也會加快程式的執行速度。

揭密雙核心與超線程技術差別

繼續閱讀