ice 物件(ice objects)
ice 物件是一種概念性的實體(或稱抽象)。ice 物件具有以下特徵:
. ice 物件是本地或遠地的位址空間中、能響應客戶請求的實體。
. 乙個ice 物件可在單個或多個伺服器中例項化(後者是冗餘方式)。如果
某個物件同時有多個例項,它仍是乙個ice 物件。
. 每個ice物件都有乙個或多個介面。 乙個介面是乙個物件所支援的一系列
有名稱的操作。客戶通過呼叫操作來發出請求。
. 乙個操作有零個或更多引數,以及乙個返回值。引數和返回值具有明確的型別。引數是有名稱的,並且有方向:in 引數由客戶初始化,並傳給伺服器; out 引數由伺服器初始化,並傳給客戶(返回值只是一種特
殊的out 引數)。
. 乙個ice 物件具有乙個特殊的介面,稱為它的主介面。此外, ice 物件還可以提供零個或更多其他介面,稱為facets (面)。客戶可以在某個物件的各個facets 之間進行挑選,選出它們想要使用的介面。
. 每個ice 物件都有乙個唯一的物件標識(object identity)。物件標識是用於把乙個物件與其他所有物件區別開來的標識值。ice 物件模型假定物件標識是全域性唯一的,也就是說,在乙個ice 通訊域中,不會有兩個對
象具有相同的物件標識。
**(proxies)
要想與某個ice 物件聯絡,客戶必須持有這個物件的**。 **是客戶的位址空間中的一種製品(artifact);對客戶而言,**就是ice 物件的代表(該物件可能在遠地)。乙個**充當的是乙個ice 物件的本地大使:
當客戶呼叫**上的操作時, ice run time 會:
1. 定位ice 物件
2. 如果ice 物件的伺服器沒有執行,就啟用它
3. 在伺服器中啟用ice 物件
4. 把所有in 引數傳送給ice 物件
5. 等待操作完成
6. 把所有out 引數及返回值返回給客戶(或在發生錯誤的情況下丟擲異常)
**封裝了完成這一系列步驟所必需的全部資訊。特別地,**包含有:
. 定址資訊:用於讓客戶端run time 聯絡正確的伺服器
. 物件標識:用於確定伺服器中的哪乙個物件是請求的目標
. 可選的facet 識別符號:用於確定**所引用的是物件的哪乙個facet
直接**(direct proxies)
. 協議識別符號(比如tcp/ip或udp)
. 針對具體協議的位址(比如主機名和埠號)
間接**(indirect proxies)
servants
ice 物件是一種具有型別、標識,以及定址資訊的概念性實體。
在伺服器端提供操作呼叫的行為的製品叫作servant。乙個servant 提供乙個或多個ice 物件的實質內容
實際上,servant 就是伺服器開發者編寫的類的例項,這些類作為乙個或多個ice 物件的servant、向伺服器端run time 進行註冊。類的方法對應於ice 物件的介面上的操作,並且提供這些操作的行為。
"最多一次"語義十分重要,因為這保證了非idempotent 操作可以安全使用。
idempotent 操作是這樣的操作:如果執行兩次,其效果與執行一次相同。例如, x = 1; 是idempotent 操作:如果我們兩次執行該操作,最終結果與執行一次是一樣的。另一方面, x++; 不是idempotent 操作:如果我們執行該操作兩次,最終結果與我們執行一次不一樣。
同步方法呼叫(synchronous method invocation)
在預設情況下, ice 使用的請求分派模型是同步的遠地過程呼叫:操作呼叫的行為就像是本地過程呼叫,也就是說,在呼叫期間,客戶執行緒被掛起,並在呼叫完成(及它的所有結果可用)時恢復。
非同步方法呼叫(asynchronous method invocation)
ice 還支援非同步方法呼叫(ami):客戶可以非同步地呼叫操作,也就是說,客戶像平常一樣使用**來呼叫操作,但除了傳遞通常的引數以外,還要傳遞乙個**物件,而客戶呼叫會立即返回。一旦操作完成,客戶端
端run time 會呼叫一開始所傳遞的**物件上的方法,把操作的結果傳給該物件(或在失敗時傳遞異常資訊)。伺服器無法區分非同步呼叫和同步呼叫——無論是哪種情況,伺服器看到的都只是客戶呼叫了某個物件上的操作。
非同步方法分派(asynchronous method dispatch)
非同步方法分派(amd)是ami 的伺服器端等價物。採用非同步方法分派,當操作呼叫到達時,伺服器端應用**會收到通知。但是,伺服器端應用不會被迫立即處理請求,而是可以選擇延緩處理,從而釋放用於處理該請求的執行執行緒。至此,伺服器端應用**就可以隨意做它想做的任何事情了。最後,當操作的結果可用時,伺服器端應用**可以發出乙個api 呼叫,告訴伺服器端ice run time,先前分派的某個請求現在已經完成;這時,操作的結果就會返回給客戶。
採用非同步分派,數百或數千客戶可以阻塞在同乙個操作呼叫中,而又不用在伺服器中占用任何執行緒。
單向方法呼叫(oneway method invocation)
通訊資料只會從客戶流向伺服器,而不會反向流動。只有對沒有返回值、沒有輸出引數、也不丟擲使用者異常的操作 ,才能進行單向呼叫。
成批的單向方法呼叫(batched oneway method invocation)
每個單向呼叫都會向伺服器傳送一條單獨的訊息。如果是一系列短小的訊息,這樣做的開銷相當可觀:客戶和伺服器端run time 必須為了每一條訊息、在使用者模式與核心模式之間切換,同時,在網路層,每條訊息還會帶來流控制和確認開銷。成批的單向呼叫允許你在一條訊息中傳送一系列單向呼叫:每次你呼叫乙個這樣的單向操作,呼叫都會緩衝在客戶端run time 中。一旦你累積了所有你想要傳送的單向呼叫,你就發出另外乙個api 呼叫,一次傳送所有呼叫。
資料報呼叫(datagram invocations)
資料報呼叫具有與單向呼叫類似的「盡力」語義。但資料報呼叫要求物件提供udp 作為傳輸機制(而單向呼叫要求提供tcp/ip)
資料報和單向呼叫一樣是不可靠的。但與單向呼叫不同,資料報呼叫可能會發生另外一些錯誤:資料報呼叫很適用於lan 上的小訊息,在lan 上,丟失的可能性很小。它們也適用於低延遲比可靠性更重要的情形,比如快速的互動式internet 應用。
成批的資料報呼叫(batched datagram invocations)
屬性(properties)
ice run time 有大量功能都是通過屬性來配置的。屬性就是「名-值」對,比如ice.default.protocol=tcp。屬性通常儲存在文字檔案中,ice run time 會對其進行解析,從而配置各種選項,比如執行緒池尺寸、跟蹤級別,以及各種其他的配置引數。
例子hello目錄下的config檔案,就配置各種屬性。
以上是從中文文件中對一些我想比較重要的部分摘抄下來的,其中有幾個要點:
1)ice run time
這是ice的核心,客戶呼叫本地**時,ice run time會開始工作,完成一系列幕後的工作,對使用者來說是透明的,各種語言的對映也要由run time來轉換。
2)ice物件
以後我在學習slice時,應該可以對ice物件有個更清晰的認識,現在只需知道:ice 物件是一種具有型別、標識,以及定址資訊的概念性實體。
3)呼叫模型
ice提供了同步呼叫,非同步呼叫,單向呼叫,資料報呼叫,批呼叫,分派模型,執行緒。這裡最關鍵的是非同步兩個字,非同步的實現使得對大量使用者的響應成為可能。
4)繫結模式
直接繫結,間接繫結,這實際就是怎樣定位物件的位置。類似corba中的naming service。
ORACLE基本常識
個表空間只能屬於乙個資料庫 每個資料庫最少有乙個控制檔案 建議3個,分別放在不同的磁碟上 每個資料庫最少有乙個表空間 system表空間 建立system表空間的目的是盡量將目的相同的表存放在一起,以提高使用效率 每個資料庫最少有兩個聯機日誌檔案 乙個資料檔案只能屬於乙個表空間 乙個資料檔案一旦被加...
電腦基本常識
一.32位cpu中的32代表什麼?1.32代表cpu的位址線長度,32位處理器表示一次只能處理32位 4個位元組 而64位處理器一次能處理64位,即8個位元組的資料。2.如果我們將總長128位的指令分別按照如果我們將總長128位的指令分別按照16位 32位 64位為單位進行編輯的話 舊的16位處理器...
html基本常識
用div布局,css控制 編輯器用的是sublime 1.doctype標籤是一種標準通用標記語言的文件型別宣告,它的目的是要告訴標準通用標記 語言解析器,它應該使用什麼樣的文件型別定義 dtd 來解析文件。作用 宣告文件的解析型別 document.compatmode 避免瀏覽器的怪異模式。do...