關於執行緒和併發的理論問題?

時間 2021-05-12 15:22:22

1樓:huan

假設乙個單執行緒的web伺服器可以十秒完成1000位使用者的請求,那麼是不是最後一位請求的使用者是所有使用者請求時間的和呢

是的。單執行緒情況下,無論是阻塞還是非阻塞 IO 模型,理論情況下,最後一位使用者的請求完成時間,是所有請求時間的和。

如果是多執行緒不考慮效能損耗和頻寬的情況下,是不是10ms就可以完成1000位使用者請求呢

是的。我假設題主此處的多執行緒指的是每個請求都是單獨建立執行緒處理的 IO 模型。

如果只有效能損耗的缺點的話,為什麼生產環境中不大規模使用執行緒呢

這個問題不成立。首先,執行緒是必須要用的,不然程式怎麼執行?其次,多執行緒在生產環境中,是大規模應用的。

2樓:地獄少女火炮蘭

Web應用一般效能的瓶頸在io上,非同步的會比同步效能高,但這個效能主要是指伺服器能同時響應更多的請求,傳統的服務端模型乙個請求對應乙個執行緒,在遇到io的時候執行緒會阻塞,此時CPU可能負載並不高,所以才會有io多路復用的說法,執行緒一旦發現現在在io,就會被安排先去做別的需要CPU的事情,等io完畢再進行接下來的工作;因此,傳統的模型是有瓶頸的,因為伺服器的記憶體不是無限的,執行緒也不能無限膨脹,所以伺服器一般會限制連線數,多於這個數就會進行排隊或者直接拒絕連線;使用io多路復用可以同時響應更多的請求,但是並不能顯著的提高處理速度,在併發較低的情況下,兩者的速度其實差別不大,都受制於io。

3樓:木文

乙個執行緒可以解決的問題為什麼要起1000個執行緒?

除非是有好處,如計算密集型任務。即使這樣也不應該是1000個,應該是cpu核心數。

4樓:賴司霽

假設乙個單執行緒的web伺服器可以十秒完成1000位使用者的請求,那麼是不是最後一位請求的使用者是所有使用者請求時間的和呢?

如果你的請求是併發的,請求是被序列處理的,那麼最後乙個返回的時間就是前面的時間和。

如果是多執行緒不考慮效能損耗和頻寬的情況下,是不是10ms就可以完成1000位使用者請求呢?

不考慮效能損耗,也就是沒有發生執行緒切換,那麼是的,10ms 就夠了。但是,你能找到一台 1000 核的機器?

一旦核數小於系統執行緒數,就會發生切換,切換就會導致效能損耗。

以及,執行緒有初始棧空間,比如 JVM 新建乙個執行緒就會建立 1 MB,1000 個執行緒就是 1 GB,你還什麼都沒乾,1 GB 記憶體已經沒有了。所以多執行緒不是銀彈,10000 併發以上就沒法解決了。

執行緒池併發引起的問題?

KindKing 這樣啊,首先咱要弄明白執行緒池是執行緒池,資料庫連線池是資料庫連線池,他們是不一樣的啊,感覺你有點混淆啊 我在這裡在你沒有描述錯誤的前提下覺得是這樣的 你執行緒池1000,是指你同時1000個請求併發訪問,這裡沒問題,你的併發請求全部通過,我認為也是沒問題的,第一,你設定1000併...

關於綠卡和上學的問題?

王老師牧羊去了 如果急著出去就轉學申請,如果不急著出去就等到大四上申請碩士大學畢業再去就讀咯。母語不是英語,TOEFL總是要考的。不管你是綠卡還是非綠卡。有了綠卡只是不要做留學簽證而已,但是申請方面的手續還是不能少的。不過從時間段來講,現在準備美本轉學,大四上學期去美國讀一年,就畢業拿美國的學士學位...

關於sevlet和tomcat的概念問題?

大寶小哥 tomcat是一座樓,只有乙個門,這個門就是對外開放的埠,你把信 request 交給門衛,門衛根據信封上寫的樓層房間號 url中的路徑 交給房間裡的A A是乙個servlet A根據信中的內容 servlet後面跟的引數 給你回了一封信 response 然後門衛把信交給了你。 昌老師 ...