細心!用心!耐心!

          吾非文人,乃市井一俗人也,讀百卷書,跨江河千里,故申城一游; 一兩滴辛酸,三四年學業,五六點粗墨,七八筆買賣,九十道人情。

          BlogJava 聯系 聚合 管理
            1 Posts :: 196 Stories :: 10 Comments :: 0 Trackbacks
          考慮這麼一個伺服器,它可以處理來自多個客戶端的服務請求(Request),為了不丟失客戶的請求,它要維持一個緩衝區,客戶的請求會先儲存至緩衝區中,而伺服器會從緩衝區中取出請求並執行,如果緩衝區中沒有請求,則伺服器就等待,直到被通知有新的請求存入緩衝區中,伺服器再度進行請求的執行。

          關於這個描述的一個簡單 UML 順序圖如下所示:
          GuardedSuspension

          首先要考慮到,緩衝區會同時被兩個以上的執行緒進行存取,即伺服器的請求處理執行緒與客戶端執行緒,所以必須對緩衝區進行防護。

          再來是當緩衝區中沒有請求時,伺服器必須等待直到被通知有新的請求。

          Guarded Suspension模式關注的是執行的流程架構,以Java來實現這個架構的話如下所示:
          • RequestQueue.java
          public class RequestQueue {
          private java.util.LinkedList queue;
          public RequestQueue() {
          queue = new java.util.LinkedList();
          }

          public synchronized Request getRequest() {
          while(queue.size() <= 0) {
          try {
          wait();
          }
          catch(InterruptedException e) {}
          }
          return (Request) queue.removeFirst();
          }

          public synchronized void putRequest(Request request) {
          queue.addLast(request);
          notifyAll();
          }
          }

          一個例子是多人聊天伺服器,請求可能只是一個客戶端送出的聊天訊息,聊天訊息會先存至緩衝區中,伺服器會不斷的從緩衝區中取出聊天訊息並發給客戶端,如果緩衝區中沒有新訊息,則伺服器就進入等待,直到有一個客戶端發出聊天訊息並存入緩衝區中,此時伺服器再度被通知,然後再度取出訊息並進行發送。
          posted on 2007-04-17 10:54 張金鵬 閱讀(301) 評論(0)  編輯  收藏 所屬分類: 多執行緒模式
          主站蜘蛛池模板: 田东县| 昭苏县| 临清市| 徐州市| 全南县| 许昌县| 济宁市| 万宁市| 神农架林区| 周宁县| 朝阳县| 乃东县| 芜湖市| 江华| 高密市| 南开区| 达拉特旗| 清涧县| 海盐县| 香格里拉县| 南召县| 万源市| 凉山| 灵石县| 靖安县| 天气| 滦平县| 喀喇沁旗| 饶平县| 蒙山县| 洛宁县| 瑞昌市| 芦溪县| 曲周县| 彰化市| 桂阳县| 庆安县| 江达县| 佳木斯市| 怀柔区| 临沧市|