儘管面臨很多挑戰,多執行緒有一些優點使得它一直被使用。這些優點是:
想象一下,乙個應用程式需要從本地檔案系統中讀取和處理檔案的情景。比方說,從磁碟讀取乙個檔案需要5秒,處理乙個檔案需要2秒。處理兩個檔案則需要:
5秒讀取檔案a2秒處理檔案a
5秒讀取檔案b
2秒處理檔案b
---------------------總共需要14秒
從磁碟中讀取檔案的時候,大部分的cpu時間用於等待磁碟去讀取資料。在這段時間裡,cpu非常的空閒。它可以做一些別的事情。通過改變操作的順序,就能夠更好的使用cpu資源。看下面的順序:
5秒讀取檔案a5秒讀取檔案b +2秒處理檔案a
2秒處理檔案b
---------------------總共需要12秒
cpu等待第乙個檔案被讀取完。然後開始讀取第二個檔案。當第二檔案在被讀取的時候,cpu會去處理第乙個檔案。記住,在等待磁碟讀取檔案的時候,cpu大部分時間是空閒的。
總的說來,cpu能夠在等待io的時候做一些其他的事情。這個不一定就是磁碟io。它也可以是網路的io,或者使用者輸入。通常情況下,網路和磁碟的io比cpu和記憶體的io慢的多。
在單執行緒應用程式中,如果你想編寫程式手動處理上面所提到的讀取和處理的順序,你必須記錄每個檔案讀取和處理的狀態。相反,你可以啟動兩個執行緒,每個執行緒處理乙個檔案的讀取和操作。執行緒會在等待磁碟讀取檔案的過程中被阻塞。在等待的時候,其他的執行緒能夠使用cpu去處理已經讀取完的檔案。其結果就是,磁碟總是在繁忙地讀取不同的檔案到記憶體中。這會帶來磁碟和cpu利用率的提公升。而且每個執行緒只需要記錄乙個檔案,因此這種方式也很容易程式設計實現。
伺服器的流程如下所述:
while(server is active)
如果乙個請求需要占用大量的時間來處理,在這段時間內新的客戶端就無法傳送請求給服務端。只有伺服器在監聽的時候,請求才能被接收。另一種設計是,監聽執行緒把請求傳遞給工作者執行緒(worker thread),然後立刻返回去監聽。而工作者執行緒則能夠處理這個請求並傳送乙個回覆給客戶端。這種設計如下所述:
while(server is active)
這種方式,服務端執行緒迅速地返回去監聽。因此,更多的客戶端能夠傳送請求給服務端。這個服務也變得響應更快。
桌面應用也是同樣如此。如果你點選乙個按鈕開始執行乙個耗時的任務,這個執行緒既要執行任務又要更新視窗和按鈕,那麼在任務執行的過程中,這個應用程式看起來好像沒有反應一樣。相反,任務可以傳遞給工作者執行緒(word thread)。當工作者執行緒在繁忙地處理任務的時候,視窗執行緒可以自由地響應其他使用者的請求。當工作者執行緒完成任務的時候,它傳送訊號給視窗執行緒。視窗執行緒便可以更新應用程式視窗,並顯示任務的結果。對使用者而言,這種具有工作者執行緒設計的程式顯得響應速度更快。
多執行緒的優點 作用
1 發揮多核cpu的優勢 如果是單執行緒的程式,那麼在雙核cpu上就浪費了50 在4核cpu上就浪費了75 多核cpu上的多執行緒它能讓你的多段邏輯同時工作,多執行緒,可以真正發揮出多核cpu的優勢來,達到充分利用cpu的目的。2 防止阻塞 單核cpu不但不會發揮多執行緒的優勢,反而再單核cpu上執...
多執行緒的優點及其應用
執行緒是系統排程和分配的單位,是輕量級程序,它共享所屬程序的記憶體空間和資源,但不擁有資源,執行緒具有以下優點 1 節省記憶體空間。這是因為多個執行緒共享程序的位址空間。2 併發粒度小,併發程度高。執行緒不擁有資源,只是程序中的乙個執行序列,因此乙個系統中可以存在好多執行緒,甚至執行緒的數目沒有限制...
php多執行緒的優點有哪些
php多執行緒的優點如下 1 使用多程序,子程序結束以後,核心會負責 資源。2 使用多程序,子程序異常退出不會導致整個程序thread退出,父程序還有機會重建流程。相關學習 教程推薦 php 教程 3 乙個常駐主程序,只負責任務分發,邏輯更清楚。4 多程序方式更加穩定,另外利用程序間通訊 ipc 也...