單線程(Thread)與多線程的區別
(一)首先了解一下cpu:
隨着主頻(cpu內核工作時鍾頻率,表示在CPU內數字脈沖信號震盪的速度,等於外頻(系統基本時間)乘倍頻)的不斷攀升,X86構架的硬件逐漸成為瓶頸,最高為4G,事實上目前3.6G主頻的CPU已經接近頂峰。
多線程編程的目的,就是"最大限度地利用CPU資源",當某一線程的處理不需要占用 CPU 而只和 I/O , OEM BIOS 等資源打交道時,讓需要占用 CPU 資源的其它線程有機會獲得CPU資源。
每個程序執行時都會產生一個進程,而每一個進程至少要有一個主線程。
這個線程其實是進程執行的一條線索,除了主線程外你還可以給進程增加其它的線程,也即增加其它的執行線索,由此在某種程度上可以看成是給一個應用程序增加了多任務功能。
當程序運行后,您可以根據各種條件掛起或運行這些線程,尤其在多CPU的環境中,這些線程是並發運行的。多線程就是在一個進程內有多個線程。從而使一個應用程序有了多任務的功能。
多進程技術也可以實現這一點,但是創建進程的高消耗(每個進程都有獨立的數據和代碼空間),進程之間通信的不方便(消息機制),進程切換的時間太長,這些導致了多線程的提出,對於單CPU來說(沒有開啟超線程),在同一時間只能執行一個線程,所以如果想實現多任務,那么就只能每個進程或線程獲得一個時間片,在某個時間片內,只能一個線程執行,然后按照某種策略換其他線程執行。由於時間片很短,這樣給用戶的感覺是同時有好多線程在執行。但是線程切換是有代價的,如果出現時間較長,就出現程序假死狀態,出現程序無響應等症狀。
因此如果采用多進程,那么就需要將線程所隸屬的該進程所需要的內存進行切換,這時間代價是很多的。而線程切換代價就很少,線程是可以共享內存的。所以采用多線程在切換上花費的比多進程少得多。
但是,線程切換還是需要時間消耗的,所以采用一個擁有兩個線程的進程執行所需要的時間,要比一個線程的進程執行兩次任務所需要的時間要多一些。
即采用多線程不會提高程序的執行速度,反而會降低速度,但是對於用戶來說,可以減少用戶的響應時間。
上述結果只是針對單 CPU,如果對於多 CPU 或者 CPU 采用超線程技術的話,采用多線程技術還是會提高程序的執行速度的。因為單線程只會映射到一個CPU上,而多線程會映射到多個CPU上,超線程技術本質是多線程硬件化,所以也會加快程序的執行速度。
以上文檔引用“douglax”的觀點:http://blog.csdn.net/douglax/article/details/1532258
下面這個簡單的應用實例是一個多線程過程
private void button1_Click(object sender,Eventargs e) { Thread t=new Thread(new ThreadStart(ThreadProc)); t.Start(); Thread.Sleep(0); t.Join(); } public static void ThreadProc() { string threa="在這里獲取UDP傳遞的流,其類型為byte[]"; Thread.Sleep(0); }
1)程序的窗口運行在主線程上;
2) Thread t=new Thread(new ThreadStart(ThreadProc)) 又啟動了另外一個線程