21

最近、私はアクター/エージェント/シェアード ナッシング アーキテクチャをサポートする代替言語に取り掛かっています。scala、clojure など (clojure は共有状態もサポートしています)。

これまでに読んだドキュメンテーションのほとんどは、イントロ レベルに焦点を当てています。私が探しているのは、4 つのギャングに沿ったより高度なドキュメントですが、代わりに何も共有されていません。

なんで ?デザイン思考の変化を理解するのに役立ちます。単純な例は簡単ですが、実際の Java アプリケーション (シングル スレッド) では、複雑な関係を持つ数千のメンバーを持つオブジェクト グラフを作成できます。しかし、エージェント ベースの同時実行開発では、大規模なシステムを設計するときに理解すべきまったく新しい一連のアイデアが導入されます。すなわち。エージェントの粒度 - 1 つのエージェントが管理する状態の量 - パフォーマンスなどへの影響、または共有状態オブジェクト グラフをエージェント ベースのシステムにマッピングするための適切なパターンです。ドメイン モデルを設計にマッピングするためのヒント。技術についてではなく、設計で技術を最大限に活用する方法についての議論 (現実世界の「複雑な」例は素晴らしいでしょう)。

4

3 に答える 3

11

設計パターンを直接提供する優れた現実世界の例を思い付くことができなくても、開始する場所がいくつかあります。

1 つ目は、概念を適切に把握することです。これを行うのに役立つ 1 つの本は 、Erlang Guru の Joe Armstrong によって書かれたソフトウェア エラーが存在する場合に信頼性の高い分散システムを作成することです。この本では、並行性指向プログラミングが非常にわかりやすい方法で説明されています。それは実際には博士号です。論文ですが、それを怖がらせないでください。ほとんどの一般的なテキストブックよりもはるかに読みやすく、お買い得です。

通常、実際のシステムを見るということは、実際の言語についてあまりにも多くを学ばなければならないことを意味します。Erlang の場合、ドキュメンテーション は設計方法論と動作を提供します (Erlang は設計パターン ライブラリについて説明します)。これは、この設定で最も一般的に使用される設計パターンを示しています。そして、これらは大規模なシステム、つまり数百万行のコード (Java などの他の言語の 4 倍から 10 倍に匹敵する) と、マシンの分散クラスタ内の 1 台のマシンで実行される数百万の同時プロセスの構築に効果的であることが証明されています。実際のライブ システムの最近の例は、 Facebook チャットです。

他のフレームワークについては、申し訳ありませんが、私は本当にあなたを助けることはできません.

于 2009-02-26T09:42:10.887 に答える
4

「アクター」はそれ自体が並行プログラミング(非同期メッセージキューとそれを処理するための実行コンテキスト)の統一パターンですが、エージェントベースのシステムの側面または要素を指定するのに役立つ多くのデザインパターンがあります。最も一般的なものの多くは、同時実行パターンに関するウィキペディアの記事にあります。いくつかのハイライト:

まだ遭遇していない場合は、Akkaに興味があるかもしれません。これは、JVM上で実行される「純粋に」イベント駆動型のアクターフレームワークです。

于 2010-05-10T23:38:20.843 に答える
1

私はここで同様の質問をしましたが、それは役立つかもしれないいくつかの合理的な答えを持っていました。私はあなたを注意深く見守っています。本当に助けになるものはまだ見つかりませんが、とても積極的に探しています。

マインドシフトは、並行アーキテクチャと言語に移行する上での最大の障壁であり、それが破られるまで、開発者は習得しやすいMSスタイルのパラダイムに固執するでしょう。それが本当に主流になるためには、学校への道を見つけ、C#やVBと一緒に教えられる必要があります。

2080プログラマーの質問に対する私の答えは、「同時に」です。

于 2009-02-20T09:18:14.740 に答える