問題タブ [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 - Scala2.8Beta1アクター
呼び出します!あるアクターから別のワーカーアクターへのメソッドは、呼び出し元が応答を受信した後でもチャネルを開いたままにしているように見えます(つまり、futureの準備ができています)。
たとえば、!!を使用します。あるアクターから別のワーカーアクターに11の異なるメッセージを送信すると、元の呼び出し元のメールボックスに次のような11のメッセージが表示され、それぞれのChannel@xxxx値が異なります。
!(scala.actors.Channel@11b456f,Exit(com.test.app.actor.QueryActor@4f7bc2、'normal))
これらのメッセージは、元の呼び出し元がexit()への独自の呼び出しでExitメッセージを送信しているため、ワーカーからの応答を待っていますか、それとももう一方の端で生成され、何らかの理由で上記の印刷フォームがありますか?この時点で、ワーカーアクターはすでに終了しているため、元の呼び出し元は!! 絶対に返信を受け取ることはありません。
元の呼び出し側アクターのメールボックスがこれらの終了メッセージでいっぱいになるため、この動作は望ましくありません(!!が使用されるたびに作成されたチャネルごとに1つ)。
どうすればこれを止めることができますか?元の発信者は、それぞれに作成された応答チャネルに自動的に「リンク」していますか?電話?
actor - 俳優をプログラマー以外の人にどのように説明しますか?
ええと、タイトルはほとんどそれです:もし私があなたの前に非技術者/私の母/ 12歳の男の子/コッカースパニエルを座って、俳優を彼らに説明するように頼んだら、どこから始めますか?私の修士のプロジェクトにはかなりの程度彼らが関わっているので、私は尋ねます、そして一日おきに誰かが私が何をしているのかを彼らに話すように私に頼みます。私がコースで他の人と話しているとき、それはそれほど悪くはありません-通常、概念は異質ですが理解できます-しかし最近、化学者である私のフラットメイトが私にそれを彼女に説明するように頼みました、そして私が苦労したと言うのはかなり巨大です控えめな表現。
技術的な土台ではなく、アイデアを伝えるような説明を探しています。それは比喩である可能性があり、正確である必要はありません。私が彼らと何をしているのかを彼らに理解させたいだけです。何か案は?
scala - Scalaの「デッドロック」
Javaでの並行性に関するSunのチュートリアルの例をscalaで書き直したいと思います。元のコードは次のとおりです:http://java.sun.com/docs/books/tutorial/essential/concurrency/deadlock.html
このコードは正しくありません。コメントが示す場所でフリーズします。誰かがこれを修正できますか?前もって感謝します。
scala - アクターの構成
アクターに追加できる Listenable/Listener トレイトを実装しました。listenerHandlerメソッドを明示的に呼び出さなくても、このスタイルの特性をアクターにアタッチできるかどうか疑問に思っています。
また、この機能が Akka ライブラリにあることを期待していました。何か不足していますか、それとも Akka がこれを含めない理由がありますか?
scala - Scala: なぜアクターは軽量なのですか?
アクターが軽量である理由は何ですか?
それらがどのように機能するかさえわかりません。それらは別のスレッドではありませんか?
scala - Scalaアクターの操作間の依存関係
私はscalaアクターを使用してコードを並列化しようとしています。これは、アクターを使用した最初の実際のコードですが、Java MulithreadingとCでのMPIの経験があります。しかし、私は完全に失われています。
私が実現したいワークフローは循環パイプラインであり、次のように説明できます。
- 各ワーカーアクターは別のアクターへの参照を持っているため、円を形成します
- メッセージを送信して計算をトリガーできるコーディネーターアクターがあります
StartWork()
- ワーカーが
StartWork()
メッセージを受信すると、ローカルで処理DoWork(...)
を行い、サークル内の隣人にメッセージを送信します。 - 隣人は他のことをして、順番に
DoWork(...)
自分の隣人にメッセージを送ります。 - これは、最初のワーカーが
DoWork()
メッセージを受信するまで続きます。 - コーディネーターは
GetResult()
、最初のワーカーにメッセージを送信して、応答を待つことができます。
重要なのは、コーディネーターはデータの準備ができたときにのみ結果を受け取る必要があるということです。ワーカーは、メッセージに応答する前に、ジョブがジョブに戻るのをどのように待つことができますか?GetResult()
計算を高速化するために、すべてのワーカーはいつでもを受け取ることができますStartWork()
。
これが、ワーカーの疑似実装の最初の試みです。
コーディネーター側:
scala - Scala 2.8 アクター
Scala コードでアクターを使用することをすぐに考えています。また、今後数週間で Scala 2.8 に移行することも考えています。私たちは Akka に注目してきましたが、現在 2.8 をサポートしておらず、その計画は 0.7 リリースから 0.8 にずれています。
分散型の監視されたアクターが必要です。Akka に代わるものはありますか? それとも、Akka 0.8 が確実に 2.8 をサポートするかどうか (そしていつ予定されているか) を知っている人はいますか? 当面は Scala アクターだけを使用し、後で Akka に切り替えることは可能でしょうか?
ありがとう、
デイブ
更新: Viktor が以下で言及しているブランチは、こちらでフォローできます
scala - アクターを使用して共有依存関係を持つ for ループを書き直すにはどうすればよいですか
より高速に実行する必要があるコードがいくつかあります。すでにプロファイリングされているため、複数のスレッドを利用したいと考えています。通常、メモリ内キューをセットアップし、キューのジョブを取得して結果を計算する多数のスレッドを用意します。共有データには、ConcurrentHashMap などを使用します。
あの道は二度と行きたくない。私が読んだことから、アクターを使用するとコードがきれいになり、akka を使用すると複数の jvm への移行がより簡単になるはずです。本当?
ただ、役者の考え方がわからないので、どこから手をつけていいのかわかりません。
問題をよりよく理解するために、いくつかのサンプル コードを示します。
アクターを使用した経験のある人が、これがアクターにどのようにマッピングされるかを提案していただければ幸いです。
sockets - ソケット接続ごとに1つのアクターを使用するScalaの方法
1つのソケット接続を回避するにはどうすればよいのでしょうか。Scalaのスレッド。私はそれについて多くのことを考えました、しかし私はいつも各クライアント接続のために入ってくるデータをリッスンするいくつかのコードに行き着きます。
問題は、おそらく数千の接続を同時に処理するアプリケーションを開発したいということです。ただし、スケーラビリティとコンテキストスイッチングが不足しているため、もちろん、接続ごとにスレッドを作成する必要はありません。
これを行うための「正しい」方法は何でしょうか。私の世界では、アクターごとに1つのスレッドをブロックする必要なしに、接続ごとに1つのアクターを持つことができるはずです。
multithreading - 基盤となるCOMライブラリへのJava相互運用機能を備えたScalaアクター
ESRIコンポーネント(COMベース、JIntegraでラップ)を使用するJVMプロジェクトに取り組んでいます。クライアントは、JVMで動作し、JavaコードにアクセスできるJARファイルを要求しました。Scalaを使いたいのですが、ライブラリがScalaの俳優とどれだけうまく連携するのか心配です。特に、COMとJavaがオブジェクトをあるスレッドから別のスレッドに渡すために使用するさまざまなメカニズムについて心配しています。
誰かがこれを経験したことがありますか?彼らはいいプレーをしますか?
編集:明確化のため
ESRIDBでI/Oを実行すると、CPU使用率が約15%であることに気付きました。各行を読み取り、その行を別のアクターに渡して解析したいと思います。次に、DBから一度に複数のスレッドを読み取ることができます。問題は、ESRIのライブラリを使用して取得された各行が、実際にはJavaでラップされたCOMオブジェクトであるということです。