首先了解一下cpu,隨着主頻(cpu內核工作時鍾頻率,表示在CPU內數字脈沖信號震盪的速度,等於外頻(系統基本時間)乘倍頻)的不斷攀升,X86構架的硬件逐漸成為瓶頸,最高為4G,事實上目前3.6G主頻的CPU已經接近頂峰。
多線程編程的目的,就是"最大限度地利用CPU資源",當某一線程的處理不需要占用CPU而只和I/O,OEMBIOS等資源打交道時,讓需要占用CPU資源的其它線程有機會獲得CPU資源。每個程序執行時都會產生一個進程,而每一個進程至少要有一個主線程。這個線程其實是進程執行的一條線索,除了主線程外你還可以給進程增加其它的線程,也即增加其它的執行線索,由此在某種程度上可以看成是給一個應用程序增加了多任務功能。當程序運行后,您可以根據各種條件掛起或運行這些線程,尤其在多CPU的環境中,這些線程是並發運行的。多線程就是在一個進程內有多個線程。從而使一個應用程序有了多任務的功能。多進程技術也可以實現這一點,但是創建進程的高消耗(每個進程都有獨立的數據和代碼空間),進程之間通信的不方便(消息機制),進程切換的時間太長,這些導致了多線程的提出,對於單CPU來說(沒有開啟超線程),在同一時間只能執行一個線程,所以如果想實現多任務,那么就只能每個進程或線程獲得一個時間片,在某個時間片內,只能一個線程執行,然后按照某種策略換其他線程執行。由於時間片很短,這樣給用戶的感覺是同時有好多線程在執行。但是線程切換是有代價的,因此如果采用多進程,那么就需要將線程所隸屬的該進程所需要的內存進行切換,這時間代價是很多的。而線程切換代價就很少,線程是可以共享內存的。所以采用多線程在切換上花費的比多進程少得多。但是,線程切換還是需要時間消耗的,所以采用一個擁有兩個線程的進程執行所需要的時間比一個線程的進程執行兩次所需要的時間要多一些。即采用多線程不會提高程序的執行速度,反而會降低速度,但是對於用戶來說,可以減少用戶的響應時間。上述結果只是針對單CPU,如果對於多CPU或者CPU采用超線程技術的話,采用多線程技術還是會提高程序的執行速度的。因為單線程只會映射到一個CPU上,而多線程會映射到多個CPU上,超線程技術本質是多線程硬件化,所以也會加快程序的執行速度。