Java的線程調度操作在運行時是與平台無關的一個多任務系統需要在任務之間實現QoS(Quality of Service)管理時如果CPU資源的分配基於Java線程的優先級那麼它在不同平台上運行時的效果是很難預測的本文利用協調式多任務模型提出一個與平台無關並且能在任務間動態分配CPU資源的方案
現在由於計算機系統已經從人機交互逐步向機機交互轉化計算機和計算機之間的業務對於時間的要求非常高軟件系統對於業務的支持已經不僅表現為對不同業務的邏輯和數據(算法+數據結構)支持而且還表現為對同時處理不同任務的時效性 (任務響應速度)支持一般任務響應的速度可以通過算法優化及並行運算分擔負載等手段來提高但是用戶業務邏輯的復雜度決定了算法優化的發揮空間硬件規模決定了所能夠承擔負載的大小我們利用Java平台的特點借鑒協調式多任務思想使CPU資源能夠在任務間動態分配從而為時間要求強的任務分配更多的CPU運行資源這也可以充分利用現有硬件為用戶業務提供最大的保障
用Java解決問題
本著軟件系統結構和現實系統結構一致的思想開發復雜業務服務的程序一般按照計算機任務和現實業務對應的思路最終形成一個大規模的多任務系統由於其跨平台性Java系統可以隨著業務的擴大平滑地升級到各種硬件平台上由於 Java自身的發展及其應用場合的不斷擴大用它實現多任務系統已經成為當前的應用方向在JEE(Java Enterprise Edition)推出以後Sun公司已經將Java的重心放在了服務器端(Server Side)系統的構造上由於客戶/服務器模型固有的多對一的關系服務器端程序也必然是一個多任務系統
在Java多任務應用中動態地將CPU資源在任務間分配有很重要的意義比如一個 Internet服務商的系統往往有多種任務同時運行有HTTPFTPMAIL等協議的支持也有商務娛樂生活咨詢等業務的服務在白天網站希望系統的CPU資源盡量保障網上用戶的服務質量提高電子商務等任務的響應速度;晚上則希望讓自己的娛樂服務和資料下載盡可能滿足下班後人們的需要另外在新興的網管(比如TMN Telecommunication Management Network)等應用領域中服務程序往往需要支持成千上萬個並發響應事件的被管理對象(MOManaged Object)對於被管理對象執行的操作不同用戶在不同時刻往往有不同的時間要求
方案選擇
在考慮動態分配CPU資源的實施方案時往往有以下兩點要求
須充分利用現有硬件資源在系統空閒時讓低優先級任務也能夠得到系統所能給予的最快響應
當硬件資源超負荷運行時雖然系統中有大規模多數量的任務不能處理但它不應受影響而能夠順利處理那些能夠被處理的最重要的高優先級任務
多任務系統要用多線程實現的最簡單方法就是將線程和任務一一對應動態調整線程的優先級利用線程調度來完成CPU資源在不同任務間動態分配這種思路在以前使用本地化代碼(Native Code)充分利用特定硬件和操作系統技巧的基礎上是基本可行的但在跨平台的Java環境中這個思路對僅有小規模任務數的簡單系統才可行原因有以下兩點
[] [] []
From:http://tw.wingwit.com/Article/program/Java/hx/201311/27234.html