對多線程系統的思考

來源:互聯網
上載者:User
問題背景

並發量是多線程系統的一個效能瓶頸。制約系統並發量的直接因素是線程數。在資源一定的情況下,線程數有個臨界值,一旦超過這個臨界值系統的效能就會隨線程增加而降低。所以,一般伺服器都會設定一個最大線程數,這個數值也就是並發量的最大值。

上述情況帶來了一個效能問題,那就是:有可能系統中的其它資源還有空餘,但並發量達到了最大值,以至於系統不能處理更多的任務。試想,如果將系統改為單線程運作,那麼線程數這個制約因素就會消失,系統的效能就會提升到一個更高的水平。那麼,問題就出現了,什麼樣的系統可以單線程運作呢?

阻塞->非阻塞

阻塞模式下,單線程不可行。單線程逐個執行函數,一個函數返回才能執行下一個。如果函數阻塞,整個系統都會停止等待阻塞結束。這種執行方式的結果是,系統效能遭到毀滅性打擊。

將阻塞模式改為非阻塞模式,任務就可以在單線程環境下執行。阻塞模式下,必須等待某個條件滿足,函數才能返回。而非阻塞模式下,等待條件的任務被放入一個等待隊列,然後不等條件成立,直接返回。

系統有兩類線程:啟動線程、回調線程。啟動線程逐個執行任務,一個任務返回後執行下一個任務。當然這裡返回的任務可能並沒有執行完畢,而是被放置在等待的隊列中。回調線程定期檢查等待條件,一旦條件成立就從等待隊列中取出一個任務,並調用其回呼函數。

即時任務

即時任務不能運行於單線程環境。即時任務的特點是,邊執行邊輸出。播放器就是典型的即時任務,它一邊執行一邊輸出視屏、音頻。判斷即時任務的標準是,能否將任務的執行結果在任務結束時一起輸出。對於播放器,上述條件顯然是不能滿足的。

Servlet的執行特點是,一次性應答。儘管Servlet執行過程中可能會操作資料庫,調用WebService介面,但是延遲這些操作到Servlet結束並無影響。所以,Servlet屬於非即時任務。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.