精華區beta Programming 關於我們 聯絡資訊
※ 引述《tester.bbs@bbs.csie.ncu.edu.tw (try or test)》之銘言: : > 對於空位管理服務器而言,沒有所謂的暫時鎖定這回事 : > 註冊了就是註冊了這樣,由於是單執行緒,沒有重複註冊問題 : > 至於有效的連續空位檢索,是Client端的工作,與Server端無關 : > 也因此,不管今天找空位要花多少時間,都跟伺服器延遲無關 : 假設全路段有 n 個站, 共 c 台 clients , client 要讀空位得有 : read 執行緒到這個 3-dim array table [座位數* (n-1)個路段] : 讀出所有座位路段的記號, 要確保正確最快就是 Multiple Read : Single Wright , 而且一旦寫入成功就得通知所有讀走空位的 ^^^^^^ 應該是 Write, 後面都寫錯了 : clint 立即更新. 剩餘空位的資料可以用MultiCast執行,由控制端主動發送 : 假設所有的 c client 在高需求最壞情況下就會發生同時搶同一個空 : 位(可能不同路段或路段重疊)的情形, 這 c 個請求就在單一 Wright : 執行緒下變成需全部排隊等候搶空位(企圖第一個寫入成功), 由於是 : 對空位改成已售出, 這排隊如果還不是按座位分對應 queue (這就是 : 顆粒度大小之不同), 就必須先對空位路段記號再做檢查, 以確保是未 : 售出才能企圖寫入記號, 也就是說必須對所需空位路段(1..n-1)記號 : 做 read-check-wright. 只是全在 server 端的 wright 執行緒做. : 假設規格要求在 T 時間內就完成成功或不成的寫入交易, 假設單筆請 : 求是 S 送達時間與 R 回覆時間, 每筆請求就是 P 處理時間, 排隊下 : 最壞就是排到尾巴, 所以要 c * P 處理時間, 故同時請求時每個請求 : 與回覆各有專線與收送器負擔, 所以收送是重疊平行, 最後最壞的一個 : 所需的時間就是 (S + c*P + R) , 照日本的範例就是 T <= 6 秒, 再 : 假設最後一個也是搶不到者, 搶不到者的判讀只要有一線段記號 read- : check 不成立就是得放棄, 以最短的一個 read-check 為估算, T = : (S + c *(read-check) + R) <= 6 秒. 你認為這樣會超過6秒嗎.... 我認為你可以把文章寫的更清楚 為什麼看你的文章看老半天還是不知道你想講什麼 : 以往, 這個 read-check-wright 必須是寫入 perment storage 以應付 : 臨時斷電 crash , 如果使用快速 DRAM 就要不停電備援. : Clint 端發現座位已售出的情況是 如果機房沒有不斷電備援那還真是糟糕 更何況另外還有一個訂位系統紀錄完整的訂位資料 只是從訂位資料重新建構空位資料需要一點時間 但是既然機房都重啟了,這點就無須在意 : 1.自己企圖賣出 : 2.已無法賣出 : 3.被通知已被他站賣出或自行向 server 端 array table 讀取空位路段 : 記號. : 上面就是 Single Supervisor/Monitor 的解法, Read 與 Wright 併行 : 緒還是必須對 Single shared memory (空位路段記號的 array table) : 做 Mutual Exclusive Lock 的鎖定與判讀動作 (通稱 semaphore). : 這種做法, client 數量 c 那天變大或變小就受影響, 不是伸縮衣無法適 : 應體型成長(Scalability). 商業與研究是不同的思考方向 商業領域要考慮的實際上可能的最大運量 目前高鐵共八站150台, 未來我估計12站220台 以每台機器8秒完成一次訂單設定, 空位的管理能力要求每36ms確認一個空位 以現有的CPU處理能力,一台電腦綽綽有餘 -- 〒作者:SmallBee 來自:46-204.dorm.ncu.edu.tw ◎二進位的世界【140.115.50.50‧binary.csie.ncu.edu.tw】