首頁  >  文章  >  Java  >  Java 多執行緒好處

Java 多執行緒好處

黄舟
黄舟原創
2017-02-28 10:10:391566瀏覽

不管多執行緒的挑戰仍然被使用的原因,是因為多執行緒仍然有幾個益處,這些益處中的一些是:


  • ##更好的資源利用

  • 在某些場景下簡單的程式設計

  • 更快回應的程式

#更好的資源利用

想像一個應用程式讀取和處理來自於本機檔案系統的檔案。讓我們說從磁碟中讀取一個文件花費5秒鐘,處理它花費2秒鐘,執行兩個文件將會花費:

#

  5 seconds reading file A
  2 seconds processing file A
  5 seconds reading file B
  2 seconds processing file B
-----------------------
 14 seconds total

當從磁碟中讀文件的時候,大部分的CPU時間都花了在等待文件讀取上。在那個時間CPU是相當空閒的。它可以做一些其他的事情。透過改變這個操作的順序,CPU可以被更好的利用。看看這個順序:

  5 seconds reading file A
  5 seconds reading file B + 2 seconds processing file A
  2 seconds processing file B
-----------------------
 12 seconds total

CPU等待第一個檔案被讀取。然後它開始讀取第二個檔案。當第二個檔案正在讀取的時候,這個CPU執行第一個檔案。記住,當等待檔案從磁碟讀取的時候,這個CPU大部分時間是空閒的。

通常情況下,CPU在等待IO的時候可以做一些其他的事情。它不一定必須是磁碟IO。它也可能是網路IO,或是來自一個使用者的輸入。網路和磁碟IO比CPU的和記憶體IO慢很多。

更簡單的程式設計

如果你正在單執行緒應用中手工的編寫上面的讀取和處理文件的順序的程序,你將不得不追蹤每一個檔案的讀取和處理的狀態。取代的,你可以啟動兩個線程,每一個線程都只是讀取和處理一個單獨的檔案。這些線程中的每一個當等待磁碟讀取檔案的時候都會被堵塞。當等待的時候,其他的線程可以使用CPU去處理他們已經讀到的文件的部分。這個結果就是磁碟將會一致保持忙碌狀態,讀取各種各樣的檔案進入記憶體。這個結果就是更好的利用了磁碟和CPU。它也會更簡單的去寫程序,因為一個執行緒只是追蹤一個單獨的檔案。

更快回應的程式

另外一個公共的目標就是將一個單執行緒的應用程式轉換成多執行緒的應用程式將會獲得一個更快響應的應用程式。想像一個伺服器應用,它正在監聽進來請求的一些連接埠。當一個請求接收到了之後,他處理這個請求,然後再返回去監聽。這個伺服器循環概述如下:

 while(server is active){
    listen for request
    process request
  }

如果這個請求花費很長時間去處理,在那段時間中沒有新的客戶端發送請求到伺服器。只有伺服器可以監聽接收的請求。

一個被替換的設計就是對於監聽的線程把一個請求傳給一個worker線程,立刻回到監聽。這個worker執行緒將會執行這個請求以及發送一個應答到客戶端,這個設計概述如下

while(server is active){
    listen for request
    hand request to worker thread
  }

這個方式,伺服器執行緒將會很快回到監聽器。因此更多的客戶端可以發送請求到伺服器。這伺服器變得更快的回應了。

對於桌面應用程式同樣也是一樣的。如果你點擊一個按鈕開啟一個長時間的任務,並且正在執行任務的線程是這個正在更新窗口,按鈕等等的線程,然後當任務執行的時候,這個應用出現不響應的情況。代替的,這個任務可以轉換成一個worker執行緒。當worker線程忙著處理任務的時候,這個視窗線程可以空閒的去回應其他使用者的請求。當worker執行緒完成的時候,它會發出訊號通知視窗執行緒。這個視窗執行緒然後可以根據這個任務的結果更新應用程式視窗。使用worker執行緒設計的程式將會給予使用者更快的回應。

 以上就是Java 多執行緒好處的內容,更多相關內容請關注PHP中文網(www.php.cn)!



#

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn