為什麼要用多執行緒

2021-08-25 08:30:11 字數 852 閱讀 2115

1、避免阻塞(非同步呼叫) 

2、避免cpu空轉 

需要處理的資訊提供得太慢,導致 cpu 效能沒有充分利用,這個時候多程序能充分利用 cpu

在io程式設計一節中,我們已經知道,cpu的速度遠遠快於磁碟、網路等io。在乙個執行緒中,cpu執行**的速度極快,然而,一旦遇到io操作,如讀寫檔案、傳送網路資料時,就需要等待io操作完成,才能繼續進行下一步操作。這種情況稱為同步io。

在io操作的過程中,當前執行緒被掛起,而其他需要cpu執行的**就無法被當前執行緒執行了。

因為乙個io操作就阻塞了當前執行緒,導致其他**無法執行,所以我們必須使用多執行緒或者多程序來併發執行**,為多個使用者服務。每個使用者都會分配乙個執行緒,如果遇到io導致執行緒被掛起,其他使用者的執行緒不受影響。

由於我們要解決的問題是cpu高速執行能力和io裝置的龜速嚴重不匹配,多執行緒和多程序只是解決這一問題的一種方法。

另一種解決io問題的方法是非同步io。當**需要執行乙個耗時的io操作時,它只發出io指令,並不等待io結果,然後就去執行其他**了。一段時間後,當io返回結果時,再通知cpu進行處理。

3、提公升效能 

在滿足條件的前提下,多執行緒確實能提公升效能 

符合機器的cpu數

多程序模式最大的優點就是穩定性高,因為乙個子程序崩潰了,不會影響主程序和其他子程序。(當然主程序掛了所有程序就全掛了,但是master程序只負責分配任務,掛掉的概率低)著名的apache最早就是採用多程序模式。

多程序模式的缺點是建立程序的代價大,在unix/linux系統下,用fork呼叫還行,在windows下建立程序開銷巨大。另外,作業系統能同時執行的程序數也是有限的,在記憶體和cpu的限制下,如果有幾千個程序同時執行,作業系統連排程都會成問題。

為什麼要用多執行緒

以前我認為多執行緒的作用就是提公升效能。實際上,多執行緒並不一定能提公升效能 甚至還會降低效能 多執行緒也不只是為了提公升效能。多執行緒主要有以下的應用場景 1 避免阻塞 非同步呼叫 單個執行緒中的程式,是順序執行的。如果前面的操作發生了阻塞,那麼就會影響到後面的操作。這時候可以採用多執行緒,我感覺...

Java為什麼要用多執行緒

用多執行緒只有乙個目的,那就是更好的利用cpu的資源,因為所有的多執行緒 都可以用單執行緒來實現。說這個話其實只有一半對,因為反應 多角色 的程式 最起碼每個角色要給他乙個執行緒吧,否則連實際場景都無法模擬,當然也沒法說能用單執行緒來實現 比如最常見的 生產者,消費者模型 就例如乙個網路爬蟲的功能,...

Python 為什麼要用執行緒池?

多執行緒的情況下確實可以最大限度發揮多核處理器的計算能力,提高系統的吞吐量和效能。但是如果隨意使用多執行緒,對系統的效能反而有不利影響。比如下面的情況 建立執行緒是需要時間的,假設執行緒建立所需時間為t1,執行緒執行任務時間為t2,執行緒銷毀時間為t3,而往往t1 t3 t2。所以頻繁建立和銷毀執行...