更新時間:2020-11-09 17:32:18 來源:動力節(jié)點 瀏覽2377次
盡管面臨很多挑戰(zhàn),多線程的效率提升并不明顯,但多線程的優(yōu)點仍使得多線程一直被廣泛地使用。下面我們就來概括的講一講多線程的優(yōu)點。
1. 資源利用率提升,程序處理效率提高
打個比方:我們做上傳圖片的時候,在上傳成功后往往會進行圖片的處理,原圖保存后,會再生成一張小圖以作為一些應用的預覽圖,那么原圖的處理就需要程序去讀取再處理,假設讀取需要花費1秒,處理需要2秒,現(xiàn)在有3張大圖,所需要耗費的時間就是(1+2)X3=9秒,根據(jù)圖片的不同,那么單位時間會更多,總計時間就會更久。
那么如果把程序設計更好的話,那就是在讀取文件的時候同時處理上一個文件,這樣就可以盡可能的縮短時間,減少客戶端的響應,同時也提升了CPU的使用率。
如果還不能理解的話那就再舉個例子,我朋友公司是專為某銀行處理數(shù)據(jù)同步的問題,每天凌晨銀行那邊會有幾十萬條數(shù)據(jù)發(fā)送過來進行處理,項目本身就是個坑,幾百萬條數(shù)據(jù)接收后直接去處理了,每次運行大多都要耗費2.5個小時,時間實在太久,如果哪天有幾億數(shù)據(jù)是不是要跑幾十個小時了?那么就可以用多線程,切割這個數(shù)據(jù),利用不同的線程來處理,最后把時間縮短到了半小時左右
2.軟件運行速度提升
將一個單線程應用程序變成多線程應用程序的另一個常見的目的是實現(xiàn)一個響應更快的應用程序。設想一個服務器應用,它在某一個端口監(jiān)聽進來的請求。當一個請求到來時,它去處理這個請求,然后再返回去監(jiān)聽。
服務器的流程如下所述:
while(server is active){
listen for request
process request
}
如果一個請求需要占用大量的時間來處理,在這段時間內新的客戶端就無法發(fā)送請求給服務端。只有服務器在監(jiān)聽的時候,請求才能被接收。另一種設計是,監(jiān)聽線程把請求傳遞給工作者線程(worker thread),然后立刻返回去監(jiān)聽。而工作者線程則能夠處理這個請求并發(fā)送一個回復給客戶端。這種設計如下所述:
while(server is active){
listen for request
hand request to worker thread
}
這種方式,服務端線程迅速地返回去監(jiān)聽。因此,更多的客戶端能夠發(fā)送請求給服務端。這個服務也變得響應更快。
3.程序設計更簡單
在單線程應用程序中,如果你想編寫程序手動處理上面所提到的讀取和處理的順序,你必須記錄每個文件讀取和處理的狀態(tài)。相反,你可以啟動兩個線程,每個線程處理一個文件的讀取和操作。線程會在等待磁盤讀取文件的過程中被阻塞。在等待的時候,其他的線程能夠使用CPU去處理已經讀取完的文件。其結果就是,磁盤總是在繁忙地讀取不同的文件到內存中。這會帶來磁盤和CPU利用率的提升。而且每個線程只需要記錄一個文件,因此這種方式也很容易編程實現(xiàn)。
總的來說,多線程還是有著其獨特的優(yōu)勢的,這些優(yōu)勢相對于多線程的劣勢來說更為重要,所以多線程的存在是符合程序的高效率運行的規(guī)律的。好了,知道了這些多線程的優(yōu)點,讓我們在本站的多線程教程中開始學習多線程的后續(xù)知識吧。