問題タブ [actor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - fork-join 計算として scala アクター フレームワークを使用しますか?
理論的には、Scala Actor Framework を使用して、JDK 7 の Fork-Join フレームワークと同様に、ある種の非同期分割統治計算を行うことは可能ですか? もしそうなら、フレームワークでFJの問題をどのように表現できますか?たとえば、チュートリアルのマージソートの概念? コード スニペットは大歓迎です。
(他のFJ 関連の質問で入手したリソース ビデオに基づいてアイデアを思いつきました。)
scala - ブロッキング呼び出しからの複数のアクター呼び出し
これはおそらく scala の教育を受けた心にとって単純な問題ですが、私はまだ初心者です ;)
タスクを複数のワーカー アクターにディスパッチし、!? を介してブロッキング外部呼び出しに結果として応答するベース アクターがあります。
結局、reply() をしなければならないので、ブロッキング呼び出しでワーカー アクターを真に並列化する方法がわかりません。呼び出しエンティティはアクターではなく、通常のクラスです。
scala - 高度に自律的なアクターをエージェントと見なすのは合理的ですか?
マルチエージェントシステム( JADEを使用してJavaで開発された)の学歴から来て、私はアクターの並行性パラダイムを周辺的にしか認識していませんでした。Scalaの探索を始めた今、エージェントとアクターのアプローチの類似点に驚かざるを得ませんでした。
単にJADEライブラリを呼び出すのではなく、ScalaのActorライブラリを次の研究プロジェクトに使用したいと思っています。これにより、言語をより深く理解する必要があります。さらに、JADEがすべてを動作の観点から定義することに焦点を当てていることは、私の問題にはあまり適切ではありません。
自律性の高いアクターとエージェントの間に根本的に違うものがありますか?
scala - Scala アクターの拡張
私はスカラが初めてです。Actor を学習するとき、def の 1 行を節約するために拡張しようとしました。
次に、例外トレースは次のようになります。
同じことを実行できる多くの代替手段があるかもしれませんが、上記のコードが機能しない理由を知っておくとよいでしょう。
scala - 眠れる俳優?
俳優を眠らせる最良の方法は何ですか? データベースのさまざまな部分を維持したいエージェントとしてアクターをセットアップしました (外部ソースからのデータの取得を含む)。いくつかの理由 (データベースや通信に過負荷をかけないこと、一般的な負荷の問題など) から、各操作の間にアクターをスリープさせたいと考えています。10 個のアクター オブジェクトのようなものを見ています。
アクターはほぼ無限に実行されます。常に新しいデータが入ってくるか、データベースの他の部分に伝播されるのを待っているテーブルに座っているなどです。間に合います。
無限ループと各ループの最後でのスリープでこれを行うことができますが、http://www.scala-lang.org/node/242によると、アクターはすべてのスレッドがブロックされるたびに拡張されるスレッドプールを使用します. したがって、スレッドを不必要に浪費するため、各アクターの Thread.sleep は悪い考えだと思います。
おそらく、クロックでサブスクライバーにメッセージを送信する独自のループを持つ中央のアクターを使用できますか (非同期イベント クロック オブザーバーなど)。
誰かが同様のことをしたか、何か提案がありますか? 余分な(おそらく余分な)情報で申し訳ありません。
乾杯
ジョー
scala - Scala アクター: 受信と反応
最初に言っておきますが、私は Java の経験が豊富ですが、関数型言語に興味を持ち始めたのはつい最近のことです。最近、私は Scala に注目し始めました。これは非常に優れた言語のようです。
しかし、プログラミング in Scalaで Scala の Actor フレームワークについて読んでいて、理解できないことが 1 つあります。章 30.4react
では、代わりにreceive
使用するとスレッドの再利用が可能になると述べられています。これは、JVM ではスレッドが高価であるため、パフォーマンスに適しています。
react
これは、の代わりに呼び出すことを覚えている限り、receive
好きなだけアクタを開始できるということですか? Scala を発見する前は、私は Erlang をいじっていました。Erlang のプログラミングの著者は、200,000 を超えるプロセスを苦労せずに生成したことを自慢しています。Javaスレッドでそれを行うのは嫌いです。Erlang (および Java) と比較して、Scala ではどのような制限が見られますか?
また、このスレッドの再利用は Scala でどのように機能しますか? 簡単にするために、スレッドが 1 つしかないと仮定しましょう。私が開始したすべてのアクターは、このスレッドで順番に実行されますか? それとも何らかのタスク切り替えが行われますか? たとえば、互いにメッセージをピンポンする 2 つのアクターを開始した場合、それらが同じスレッドで開始された場合、デッドロックの危険がありますか?
Programming in Scalaによると、使用するアクターを記述することreact
は、 を使用する場合よりも困難ですreceive
。react
返されないので、これはもっともらしく聞こえます。ただし、この本は、 をreact
使用してループ内に配置する方法を示していますActor.loop
。その結果、あなたは得る
これは、私にはかなり似ているようです
これは本書の前半で使用されています。それでも、この本には、「実際には、プログラムには少なくとも数個receive
の が必要になる」と書かれています。それで、私はここで何が欠けていますか?戻る以外にできること、できないreceive
ことは何ですか?react
そして、なぜ私は気にしますか?
最後に、私が理解していないことの核心に来ます.本は、どのように使用react
するとコールスタックを破棄してスレッドを再利用できるようになるかについて言及し続けています。それはどのように機能しますか?コールスタックを破棄する必要があるのはなぜですか? また、関数が例外をスローして終了する場合 ( react
) にコール スタックを破棄できるのに、( ) を返すことで関数が終了する場合に破棄できないのはなぜreceive
ですか?
Programming in Scalaは、ここでの重要な問題のいくつかをごまかしているように感じますが、それ以外は本当に優れた本なので、これは残念です。
scala - アクター内からブロッキング アクターを呼び出す
Actor
内部から反応を呼び出すと、これは呼び出しをブロックしますか、Actor
それとも他のリクエストを処理していますか?
scala - 実際に Scala アクターを使用してアプリケーションを作成する
私は現在、scala アクターを使用していくつかのアプリケーションを作成しており、私が遭遇した問題のいくつかに人々がどのようにアプローチしたり対処したりしたかに興味があります。
大量の Message クラスまたは !?
ユーザー操作に反応し、何かを起こさなければならないアクターがいます。react
それをメッセージにしましょうUserRequestsX(id)
。私が抱えている継続的な問題は、プログラムをモジュール化したいため、1 つのアクターだけでは、他のアクターを巻き込むことなくアクションを完了できないことです。たとえば、id
パラメーターを使用して一連の値を取得する必要があり、これらを他のアクターを介して削除する必要があるとします。普通の Java プログラムを書いていたら、次のようなことをするかもしれません:
これは簡単です。ただし、アクターを使用するのは少し面倒です。使用を避けたいからです !?
。1 つのアクターがメッセージに反応しますが、取引をReportTrades(date)
依頼してから報告する必要があります。これを行うために私が見つけた唯一の方法は、次のことです。PersistenceActor
ReportActor
私PersistenceActor
の中に反応ブロックがあるように:
しかし今、私は2つの問題を抱えています:
- 同じリクエストを表す追加のメッセージ クラスを作成する必要があります(つまり、「取引の報告」)。実際、このシナリオには 3 つありますが、もっと多くある可能性があります。これらを追跡するのは問題になります。
- 1 番目と 3 番目のメッセージは何と呼べばよい
ReportTrades
ですか? それらを両方と呼ぶのは紛らわしいReportTrades
です (または、そうする場合は、それらを別々のパッケージに入れる必要があります)。overloading
本質的に、型によるクラスのようなものはありませんval
。
足りないものはありますか?これを避けることはできますか?あきらめて使用する必要があり!?
ますか?
scala - 実践IIでScalaアクターを使ってアプリケーションを書く
私の最初の質問はとても長かったので、私はこれを別の質問として尋ねています。これは、アクターベースのアプリケーションのアーキテクチャに関するもう1つのものです。
アプリケーションを介したメッセージパスを追跡する
Javaコードの一部を見てみましょう。
このコードでは、4つの個別のコンポーネントがあり、プロシージャに必要なコンポーネント間の相互作用はdeleteTrades
明確に定義されています。メソッドに完全に含まれていdeleteTrades
ます。
これをsでモデル化しActor
、4つのコンポーネントを4つの別々のアクターに置き換えます。手順に含まれるものを(頭の中で)追跡するにはどうすればよいですか?特に、演算子の使用を避けている場合は、にメッセージを!?
送信する可能性があります。これにより、メッセージが送信され、さらにメッセージなどが送信されます。削除を処理するためのコードが散らばっています。私のアプリケーション全体。ConditionalDelete
PermissionActor
GetTradesAndDelete
PersistenceActor
また、ほとんどすべてのアクターが(メッセージを転送するために)他のすべてのアクターのハンドルを必要とすることも意味します。
私の前の質問のように、人々はこれにどのように対処しますか?これらすべてを追跡できる優れたモデリングツールはありますか?人々は!?
私があまりにも多くのコンポーネントをActor
sに変えているのですか?
performance - アクター キューの最大サイズは?
システムでアクターを使用して一部のストレージをラップすることを検討しています (データベースである可能性があり、メモリ内コレクションである可能性があります)。これを行う理由は、ストアへの呼び出しがそれを呼び出しているコードからブロックされないようにするためであり、大量のメッセージをプッシュするつもりです。
アクターの受信メッセージ キューは、何十万ものメッセージを処理できますか? オブジェクトのメソッドを直接呼び出すコードと、途中にキューを持つアクターを配置することとでは、パフォーマンスにどのような違いがあるでしょうか?
乾杯
ジョー