java多線程效能淺析

來源:互聯網
上載者:User

今天看見je上一帖,對於上億資料求和的演算法,採用多線程到底快還是慢,我認為需要按情況而定。
1.單核,無IO,網路等資源操作情況下
   結果:多線程比單線程理論上要慢
   原因:多線程啟動線程需要消耗cpu資源,多線程只是把這一計算過程分區,在同一時刻只會有一個線程佔有cpu,所以採用多線程不但在啟動時耗費資源,線上程調度上同樣也耗費時間。所以單線程比多線程理論上要快。
2.單核,有IO,網路等資源操作情況下
   結果:多線程比單線程理論上要快
   原因:如果這上億資料需要從檔案中或者網路的其它地方(資料庫)擷取,在IO和網路操作的時候,由於IO和網路操作比cpu慢的多,所以cpu等待io操作;多線程的時候,當一個線程io讀取部分資料的時候,其它線程可以進行計算。而單線程需要等待檔案讀取完成後進行計算。所以理論上多線程要快。
3.多核,無IO,網路等資源操作情況下
   結果:不確定
   原因:在大部分作業系統上,一個進程的多個線程可以分配到多個cpu上平行處理所以多線程理論上比單線程快;在部分的作業系統上不支援一個進程的多個線程分配到多個cpu上平行處理,根據1的結果可以看出多線程理論上比單線程慢。
4.多核,有IO,網路等資源操作情況下
   結果:多線程比單線程理論上要快
   原因:如果作業系統支援一個進程的多個線程分配到多個cpu上平行處理,則多線程比單線程理論上要快。
         如果作業系統不支援一個進程的多個線程分配到多個cpu上平行處理,則多線程比單線程理論上要快,根據2的結果得出。

拿je上高手們的一個例子:挖山洞,我擴充下。
  單核,單線程,有IO:相當於從山的一側進行挖掘工作,工作者需要挖5分鐘,然後花費5分鐘,用小車將土運出。
  單核,多線程,有IO:相當於從山的一側進行挖掘工作,工作者需要挖5分鐘,然後花費5分鐘,用小車將土運出,運土的時候,另一個工作者開始挖掘;

  雙核,單線程,有IO:相當於從山的兩側一個工作者進行挖掘工作,工作者需要挖5分鐘,然後花費5分鐘,用小車將土運出;
  雙核,多線程,有IO:相當於從山的兩側兩個工作者進行挖掘工作,工作者需要挖5分鐘,然後花費5分鐘,用小車將土運出;

  單核,單線程,無IO:相當於一個工作者從山的一側進行挖掘工作。
  單核,多線程,無IO:相當於兩個工作者從山的一側進行挖掘工作,一個挖,另一個歇息,輪流工作。

  雙核,單線程,無IO:相當於從山的兩側一個工作者進行挖掘工作。
  雙核,多線程,無IO:相當於從山的兩側兩個工作者進行挖掘工作。

  當然有些工地只允許一個工作者工作。

  例子雖然比較牽強,但也大致可以說出個理來。一年後在來分析下,看看能不能從更深的角度進行分析!

本文轉自www.35java.com

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.