0

私は、おそらく 1 秒間に 30 回更新する多くのエンティティを特徴とするシミュレーションを開発しています。1000 個のエンティティがあり、それぞれに速度があり、その結果、ティックごとに更新する必要がある位置があるとします。

では、アクター モデルを使用してこれをどのように実装しますか? このプロジェクトで必ずしも Erlang を使用しているわけではありませんが、議論のために、使用しているとだけ言っておきましょう。これらの各エンティティのアクターはありますか? それとも、これらのエンティティのリストを維持および更新する「マネージャー」アクターが必要ですか?

Learn You Some Erlang 言います:

Erlang プロセスが非常に軽いのは事実です。同時に何十万ものプロセスを存在させることができますが、できるからといって、そのように使用しなければならないという意味ではありません。たとえば、弾丸を含むすべてが独自のアクターであるシューティング ゲームを作成することは狂気です。このようなゲームでシュートするのは自分の足だけです。アクターからアクターへのメッセージの送信にはまだわずかなコストがかかります。タスクを分割しすぎると、処理が遅くなります!

そのため、マネージャーの方が優れていると思われます。または、私が見ていない 3 番目のオプションはありますか?

4

2 に答える 2

0

あなたはそれを言う!良い解決策は1つではありません。

今、もっと役立つように、そして私が持っているいくつかの背景を踏まえて、あなたはあなたのプロジェクトのこれらの側面を見るべきだと思います:

あなたはシミュレーションと言います。30ミリ秒ごとにエンティティのコレクションを更新する必要がある場合は、最初に操作とデータモデルを簡素化するために作業し、次にデータのコレクションを効率的にトラバースする方法を考えます。

一方、単純なアルゴリズム/データモデルを使用して、オブジェクトの膨大なコレクションや進化するコレクションがある場合は、リストよりもスマートなデータ構造を調べて、データコピーを処理してください...

マルチコア(またはクラスター)を使用する場合は、並列処理を利用して個別のプロセスで管理するために、エンティティを複数のスーパーエンティティにグループ化することを検討してください。

次に、これらのグループが評価の数を減らすのに役立つかどうかを考えます(適応型のタイムスライスがありますか?オンデマンドで評価しますか?...)。

最後に、一般的に言えば、Erlangはコンパクトでリファクタリングが簡単だと思います。そのため、これを利用していくつかの機能ステップを定義し、それぞれについて、

それらを機能させ、正しくし、そして速くします(Kent Beck?)

最後のステップとして、fproofなどのプロファイリングツールからいくつかの助けを得ることができます

勇気:o)

于 2013-03-04T19:18:56.283 に答える
0

Learn You Some Erlang は、ここで少し時期尚早な最適化の失敗をしていると思います。最も意味のある抽象化を使用し、問題を測定し、必要に応じてリファクタリングする必要があります。個人的には、各パーティクルを独自のアクターとしてモデル化するのが最も扱いやすく、アクター モデルの最も慣用的なアプローチでもあると考えています。ただし、実際には、ボートを浮かせることは何でもする必要があります。

于 2013-03-07T01:06:48.237 に答える