[前][次][番号順一覧][スレッド一覧][生データ]

langsmith:152

From: "HAMADA, Masaaki" <allchapters nifty.com>
Date: Tue, 12 Oct 2004 21:43:15 +0900
Subject: [langsmith:152] Re: 並行プログラミングのサポート

濱田全章です。

On 09 Oct 2004 23:59:14 +0900
MAEDA Atusi <maeda-langsmith atusi.org> wrote:

> "HAMADA, Masaaki" <allchapters nifty.com> writes:
> 
> > で話をもどして、ActiveObjectですが、最近のGUIフレームワークの多くが
> > 各GUIコンポーネントへの直接アクセスを許さずイベントループ経由で起動
> > することを要求しますが、これはまさにActiveObjectモデルといえますね。
> > 
> > これによって次のメリットを享受できます。
> > 
> > - デットロックを始めとするMT(マルチスレッド)プログラミング特有の問題を
> >   すべてなくせる
> > - その結果MTセーフを実現するための、ときに過剰である排他処理が不要となり
> >   そのオーバヘッドをがなくせて、かつコードもシンプルに
> >   (排他処理が必要なところはメッセージのpost/popのところのみ)
> 
> 個々のアクターの基本的な動作としてはたしかにデッドロックフリーですが、
> 「他からのレスポンスを待つ」ようなことをすると、やっぱりデッドロックは
> 生じ得るんじゃないでしょうか。

スレッドは止まらなくてもアプリレベルでは止まってしまうのはありえますね、
言語レベルですべての非同期呼び出しに関してタイムアウトやキャンセルなど
を面倒見てくれればある程度そういうのも救えるんじゃないかなと思っています。


> あとは、キューのサイズが有限だと、やっぱりデッドロックが…とか。

今時のOSならスタックは自動伸張しますが、キューも効率よく柔軟に伸び縮み
するようにできないかな?


> ただ、並行プログラミングをすっきりさせるモデルとしては私も有効だと思い
> ます。キューの長さは有限(というか0)ですが、Minixもこんな作りで書いてあ
> りましたよね。デバイスドライバやファイルシステムは、それぞれがメッセー
> ジ処理ループを回るタスクとして。
> 
> > これをなるべく同期式の場合と同等に記述できるようにするにはどうしたら
> > いいかを考えてみたところ、まず
> > 
> > - コンテキストを複数用意して、非同期呼び出しの後はそのコンテキストを
> >   保存して別のコンテキストでメッセージループを回し直す
> >   → non-preemptiveなスレッド(=coroutine)があればよい
> > - やがてレスポンスが返ればもとのコンテキストを復元して処理を継続させる
> > 
> > と考えました。つまりActiveObject自体はpreemptiveなスレッドでそれぞれ
> > 並行動作するのですが、ActiveObjectの中身はnon-preemptiveなスレッド
> > で並行動作するというモデルになります。
> 
> 今月の「コンピュータ・ソフトウェア」に昔のABCL/1 (Actor Based
> Concurrent Language)の論文が再録されています。

おお、まさにアクターの名を持ったプログラミング言語なんですね。
その論文を読んでみたいですが「コンピュータ・ソフトウェア」とは
学会誌か何かでしょうか?


> ABCL/1では、メッセージ送信に
> ・過去型(非同期)
> ・現在型(同期的: 2つの過去型メッセージ送信で実現)
> ・未来型(非同期に送信して、返答は他のオブジェクトへ送らせる: 過去型と
>   現在型の組合せで実現)
> の3つがあり、過去型に当たる非同期なものしかないActorより簡潔に記述でき
> るということになっています。

ざっとググッてみると未来型というのが丁度Futureパターンを使ったもののよう
ですね。現在型でレスポンスが返ってくるまではそのスレッドはブロックするか
どうかが気になるところ・・

あとアクターベースとなると基本は全オブジェクトがメッセージパッシングに
なっちゃいそうですが、実用上それはあまりにオーバーヘッドが大き過ぎるの
よく言われるところかと思います。
MicrosoftのCOMではオブジェクトが属するスレッドモデル空間を表すアパート
という概念がありますが、そのアパート(シングルスレッドアパートメント)全体
をひとつのアクターと見立てるぐらいの粒度で考えられればな、と思ってます。
で、そのシングルスレッドアパートメントで並行動作したい場合はcoroutine
(Windows用語ならfiberかな?)を使うと。

考えてるだけではしょうがないので、実は上記のモデルをもつようなプログラミング
言語を細々と作り始めています。あまり時間がとれないのでなかなか作業進みません
がいつか公開できればいいなっ(現在flex/bisonと格闘中)

-- 
濱田 全章
HAMADA, Masaaki <allchapters nifty.com>


--
ML: langsmith quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

       131 2004-09-28 00:46 [allchapters nifty.co] 並行プログラミングのサポート            
       132 2004-09-28 09:09 ┣[matz ruby-lang.org  ]                                       
       133 2004-09-29 03:22 ┃┗[allchapters nifty.co]                                     
       149 2004-10-09 23:59 ┃ ┗[maeda-langsmith atus]                                   
->     152 2004-10-12 21:43 ┃  ┗[allchapters nifty.co]                                 
       153 2004-10-12 23:43 ┃   ┗[maeda-langsmith atus]                               
       157 2004-10-14 13:00 ┃    ┣[maeda-langsmith atus]                             
       158 2004-10-15 00:30 ┃    ┗[allchapters nifty.co]                             
       159 2004-10-15 02:08 ┃     ┗[maeda-langsmith atus] CPS (Re: 並行プログラミングのサポート)
       134 2004-10-05 00:53 ┗[mas pb.highway.ne.jp]                                       
       137 2004-10-07 01:18  ┗[allchapters nifty.co]