Next: Up: Previous:

チャネルプロトコルにおける First Class Continuation

 

著者らの以前の研究 [45] で, 効率的な一階の通信チャネルを 実装する方式を提案した. 計算モデルは逐次呼び出しに固有の 概念を持っていない. すべての手続き呼びだしは, 少なくとも 概念的には, 非同期呼び出しである. スレッドは通信チャネル によって通信し, 同期する. 起動の返り値を返すために, 各手続きは, 通常のパラメタの他に, reply channelと 呼ばれる追加のパラメタをとる. future 呼び出しは, チャネルの生成, 新しいチャネルを reply channel として 渡しての手続き呼びだし, そしてあとで結果を reply channel から 受けとることによって表現される. 逐次呼び出しは future 呼び出しの 特別な場合に過ぎない. スレッド生成が十分速いので, 最も問題となるのは どのようにチャネルを実装するかである. スレッドが新しい 空のチャネルを新しい局所スレッドに渡すときには, そのために メモリを確保することはせずに, 空のチャネルを示す特別なフラグの値をセットするだけである. callee がまだヒープに割り当てられていないチャネルに値を書くときには レジスタに値を書き, フルチャネルを表すフラグをセットするだけである. reply channel に一つの値を残して手続きが終了するときには, それは手続きの返り値としてその値を返すだけである. 一方, もし 手続きがブロックしたときには, reply channel は boxed な 表現--それのためにヒープメモリが確保される--に変わり, フラグにはそれへのポインタがセットされる. box 化する操作は callee のコンテキストから reply channel が エスケープするときにもなされる. 例えば, それが遠隔プロセッサ に渡されるときや, データ構造に格納されるときである. callee が結果の値を受けとろうとするときには, フラグをチェックし, もし値があったら, その値は手続きの返り値として取り出される だけである. このモデルの注目に値する点は, その一般性と 単純さである. 逐次呼びだし固有の概念はなく, 非同期呼びだし に固有な概念すらない. 結果の値の受け渡しや排他制御を含め, 多くのプリミティブがスレッドと通信チャネルから構成される. 頻繁に起こるケースの効率は効率的なスレッド生成と 手の込んだ通信チャネルの表現方式によってなお維持されている.



Mitsubishi Research Institute,Inc.
Mon Feb 24 19:27:36 JST 1997