當然,協調式多任務的思想也有其局限性,主要就是它的調度粒度比較大。系統能夠保證的粒度是一次消息處理過程。如果消息處理邏輯非常費時,那么編程人員就必須再處理函數內部,讓系統主動讓出CPU資源。這雖然需要在處理消息響應邏輯時增加一個考慮因素,但是,在Windows系統盛行的今天,這是一個已經被普遍接受的思路。由于方案中并沒有局限為消息隊列服務的線程數目,所以一個長時間的消息響應只會影響一個線程,而不會對整個系統產生致命的影響。除了調度粒度的問題以外,還有訪問消息隊列操作在各個線程間互斥的問題。取出消息的過程是串行化的,因此對于這一瓶頸的解決方案就是:假設取出一條消息的操作相對于處理消息的消耗可以忽略不計,那么對于多次調用且僅有兩三行響應邏輯的消息,編程人員通過函數調用就可以直接執行。
前面比較詳細地闡述了多任務系統中任務的劃分以及執行等內容。雖然這些是一個系統的核心,但是在一個實用的系統中,還需要任務間的同步、互斥等機制。在上述框架內,互斥可以簡單地用Java的Synchronized機制實現。由于任務可以主動讓出執行權限,要實現等待(Wait任務中止)和通知(Notify任務繼續),從而實現任務同步也就比較容易了。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/