ice學習筆記

2021-04-08 13:00:06 字數 1694 閱讀 2372

引言

通過使遠地呼叫變得像傳統的方法呼叫一樣容易,現代中介軟體技術力圖

減輕程式設計師在轉向分布式應用開發時的負擔:你呼叫某個物件上的方法,

當該方法完成時,就會返回結果,或是丟擲異常。當然,在分布式系統

中,物件的實現可能會駐留在另乙個主機上,從而帶來一些語義上的差

異,程式設計師必須加以注意,比如遠地呼叫的開銷,以及可能發生與網路有

關的錯誤。儘管有這樣一些問題,程式設計師的物件導向程式設計經驗仍然是有用

的,上述的同步程式設計模型(發出呼叫的執行緒會阻塞到操作返回)是我們所

熟悉和容易理解的。

ice 在本質上是乙個非同步的中介軟體平台,出於對應用(及其程式設計師)的

考慮而模擬了同步的行為。當ice 應用通過**、向遠地物件發出同步的雙

向呼叫時,發出呼叫的執行緒會阻塞起來,以模擬同步的方法呼叫。在此期間, ice run time 在後台執行,處理訊息,直到收到所需的答覆為止,然後

發出呼叫的執行緒就可以解除阻塞,解編結果了。

但是,在許多情況下,同步程式設計的阻塞本質太過受限。例如,在等待遠

地呼叫的響應返回時,應用本來可以另外做一些工作;在這樣的情況下使

用同步呼叫,應用就會被迫把工作推後、等待響應返回,或是在另外乙個

執行緒中執行該工作。如果這些做法都不可接受, ice 的非同步設施提供了一種

有效的解決方案,可以改善效能和可伸縮性,或是簡化複雜的應用任務。

非同步方法分派

乙個伺服器在同一時刻所能支援的同步請求數受到ice run time 的服務

器執行緒池的尺寸限制(參見15.3 節)。如果所有執行緒都在忙於分派長時間

執行的操作,那麼就沒有執行緒可用於處理新的請求,客戶就會經驗到不可

接受的無響應狀態。

非同步方法分派(amd) 是ami 的伺服器端等價物,能夠解決這個可伸縮

性問題。在使用amd 時,伺服器可以接收乙個請求,然後掛起其處理,

以盡快釋放分派執行緒。當處理恢復、結果已得出時,伺服器要使用ice run

time 提供的**物件,顯式地傳送響應。

用實際的術語說, amd 操作通常會把請求資料(也就是,**物件和

操作引數)放入佇列 ,**用的某個執行緒(或執行緒池)隨後處理用。這

樣,伺服器就使分派執行緒的使用率降到了最低限度,能夠高效地支援數千

併發客戶。

另外, amd 還可用於需要在完成了客戶的請求之後繼續進行處理的操

作。為了使客戶的延遲降到最低限度,操作在返回結果後,仍留在分派線

程中,繼續用分派執行緒執行其他工作。

關於amd 的更多資訊,參見17.4 節。

總結同步的遠地呼叫是對本地的方法呼叫的自然擴充套件,它利用了程式設計師的面

向物件程式設計經驗,使初學分布式應用開發的程式設計師的學習曲線平緩下來。

但是,同步呼叫的阻塞本質使得有些應用任務的實現變得更為困難,甚至

不可能,因此, ice 提供了乙個直截了當的介面,你可以用這個介面來訪問

ice 的非同步設施。

如果使用非同步方法呼叫,發出呼叫的執行緒可以呼叫乙個操作,然後馬上

就重獲控制,不用阻塞起來等待操作完成。當ice run time 收到結果時,它

會通過**通知應用。

與此類似,非同步方法分派允許servant 在任何時候傳送操作的結果,而

不一定要在操作實現中傳送。通過把費時的請求放在佇列中,後面再進行

處理, servant 可以改善可伸縮性,並節省執行緒資源。

ice學習和編碼

工作快一年了,打算把前半年的東西複習下,並且生成blog儲存。ice是一種物件導向的中介軟體平台。從根本上說,這意味著ice為構建物件導向的客戶 伺服器應用提供了工具 api和庫的支援。ice應用是和在異種環境紅使用 客戶和伺服器可以用不同的程式語言編寫,可以執行在不同的作業系統而後及其架構上,並且...

ice學習和編碼

工作快一年了,打算把前半年的東西複習下,並且生成blog儲存。ice是一種物件導向的中介軟體平台。從根本上說,這意味著ice為構建物件導向的客戶 伺服器應用提供了工具 api和庫的支援。ice應用是和在異種環境紅使用 客戶和伺服器可以用不同的程式語言編寫,可以執行在不同的作業系統而後及其架構上,並且...

Ice筆記 服務端的Slice to C

初始化和結束伺服器端ice run time的實現可分為三種方式 常用main函式實現,利用 類實現,利用ice service類等。ice run time 的主要進入點是由本地介面ice communicator表示,在程式的開始必須首先呼叫ice initialize對ice run time...