ice的基本常識

2021-04-23 12:59:45 字數 3721 閱讀 2239

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...