1. 程式人生 > >執行緒的上下文開銷真得那麼厲害嗎(2)?

執行緒的上下文開銷真得那麼厲害嗎(2)?

      執行緒切換的開銷的確是比較厲害的。這是從今天的實驗中得出的結果。

      為了解決上次提出的疑問,今天在實驗室做了一個試驗,來測試執行緒的切換是否開銷比較大。由於主要是為了比較執行緒的數目多少對效能的影響,所以,具體的測試環境就不提了,只要每次實驗在同等的條件下即可。

      首先,在MQ的Server端啟動100個讀執行緒,100個寫執行緒,100個訊息deliver執行緒,客戶端同時啟動100個傳送者,100個接收者,對4個queue進行不斷髮送1K大小的訊息,測試結果為大約每秒可以傳送&接收600個左右的訊息。而此時客戶端的cpu消耗大概在80%左右,伺服器端的cpu消耗在100%,但是執行緒切換大概佔了30%左右。也就是說,只有70%的cpu用於訊息的處理。

     接著,在MQ的Server端啟動10個讀執行緒,10個寫執行緒,10個訊息deliver執行緒,客戶端同時啟動100個傳送者,100個接收者,對4個queue進行不斷髮送1K大小的訊息,測試結果為大約每秒可以傳送&接收800個左右的訊息。此時客戶端的cpu消耗一般在90%以上,伺服器端的cpu消耗在100%,而執行緒切換大概佔了10%左右。也就是說,有90%的cpu用於訊息的處理。

     隨後,又對server端採用4個讀寫執行緒、訊息deliver執行緒,以及20個,50個等不同執行緒數進行了測試,測試結果都沒有優於10個執行緒數的情況。

    所以,可以得出結論,對於單cpu的情況,執行緒的切換的確會帶來相當大的開銷。今天的測試結果同時也表明了JTangMQ在100個傳送者,100個接收者的情況下已經比JBossMQ每秒多傳送&接收100個訊息,而在400個傳送者,400個接收者的情況下,傳送速度比JBossMQ多出幾十個,接收著少了幾十個,總體效能已經相當。當然,在傳送者&接收者數目較少的時候,效能明顯優於JBossMQ。所以,接下來的目標是在多傳送者&接收者的條件下,超過JBossMQ,做到效能的全部提升。