問題タブ [celluloid]
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.
ruby-on-rails - セルロイドとアクティブレコードの使い方
私はセルロイドを使用してバックグラウンドでいくつかのジョブを実行しています。一部のジョブはDBを使用しており、そのためにセル(アクター)で以下のコードを使用しています:
場合によっては、DB をキューに入れているサービスがいくつかありますが、他のロジックが含まれています。に送信できます...with_connection
か、それとも通話をラップする必要がありますか? これをすべて行うより良い方法はありますか?
ruby - Celluloid を使用したノンブロッキング サブプロセス
アクターをブロックせずにサブプロセスを生成する最良の方法は何ですか?
私の目標は、複数のコマンドを実行し、それらが完了したら、出力と終了コードを取得することです。私はこれを試しましたが、明らかに、 popen 呼び出しがブロックされています:
出力は次のとおりです。
しかし、各「サブプロセスの開始」の間に5つの「ティック」が必要です...
ありがとう !
ruby - セルロイド コードのテスト アプローチ
私は主題をグーグルで検索するのに時間を費やしましたが、これで失敗しました。誰かが次のいずれかを共有できますか?
- 非同期処理の例* で記述されたテスト コードを使用
Celluloid
- Ruby での非同期処理のテストに関する記事または小さな記事
* 申し訳ありませんが、any async thing
奇妙に聞こえるかもしれませんが、それを呼び出す方法がわかりません :-)
ruby - セルロイドの同時実行について
以下は私のセルロイドコードです。
client1.rb
2 クライアントのうちの 1 つ。(クライアント1と名付けました)client2.rb
2 クライアントの 2 番目。(クライアント 2 と命名)
ノート:
上記の 2 つのクライアントの唯一の違いは、サーバーに渡されるテキストです。すなわち('client-1'
および'client-2'
それぞれ)
次の 2 つのサーバー (一度に 1 つ) に対して、この 2 つのクライアントを (並べて実行して) テストします。非常に奇妙な結果が見つかりました。
server1.rb
( celluloid-zmq の README.md から取られた基本的な例)これを上記の 2 つのクライアントのサンプル サーバーとして使用すると、タスクが並列実行されます。
出力
ノート:
client1.rbリクエストがスリープ状態のときに client2.rb メッセージが処理されました。(並列処理のマーク)
-
これを上記の 2 つのクライアントのサンプル サーバーとして使用しても、タスクの並列実行は発生しませんでした。
出力
ノート:
クライアント 2は、クライアント 1がスリープ状態になって から 60 秒間待機するように求められました(60 秒間スリープ)
上記のテストを複数回実行しましたが、すべて同じ動作になりました。
上記のテストの結果から、誰でも説明できますか。
質問:他のリクエストを処理する前にセルロイドが 60 秒間待たされるのはなぜですか?
ルビー版
ruby -v
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin13.0]
ruby - データの問題を引き起こすセルロイド ZMQ で延期
私の問題を説明するサンプルコード。
要求をサーバーに (ZMQ 経由で) 次の形式で送信する送信者
サーバーは、送信者からデータを受信すると、それを同じ形式で受信者に中継します。
受信者は、サーバーからの要求を受信すると、メッセージを出力するだけです。
説明:
この行(サーバー内)mutex
で定義されたを使用しない場合。上記のフォーマット/標準に準拠していないデータが受信側に表示されます。
サーバーが出力する例 (この行)
しかし、受信側では、次のようなメッセージが表示されます。
質問:
私には、スレッドの問題の可能性があるようです(私は間違っているかもしれません)。(サーバー内の)Celluloid(send)に渡されるデータは、他のスレッドによって変更されています。
Celluloid がスレッドの問題のほとんどすべてを処理しているという印象を受けました。
このすべてについて私の理解は正しいですか?
ruby - セルロイドプールを理解する
セルロイドプールに対する私の理解は、ちょっと壊れていると思います. 以下で説明しようと思いますが、その前に簡単なメモを。
注: 私たちのシステムはfast client
、ZeroMQ を介して非常に通過するメッセージに対して実行されています。
以下のバニラセルロイドアプリで
私たちのシステムは、しばらくして、理由 'Can't spawn more thread'
(またはそのようなもの)の後に失敗します
そのため、(上記の問題を回避するために) Celluloid Pool を使用して、生成されるスレッドの数を制限できるようにするつもりでした。
Celluloid Pool に対する私の理解は、Celluloid Pool は、タスクを並行して分散できるように、アクターのプールを維持するということです。
したがって、私はそれをテストすることにしましたが、私のテストケースによると、シリアルに動作するようです (つまり、物事が分散したり、並列に発生したりすることはありません)。
これを複製する例。
によって送信されたデータを消費する前に、プールが 1 秒間ブロックされたように見えるsender-2.rb
前に が実行された場合(スリープ時間は、ここで確認できます)。sender-1.rb
20
the_client.rb
sender-1.rb
ruby-2.2.2 でも jRuby-9.0.5.0 でも同じように動作します。プールがそのような行動をとる原因として考えられるものは何ですか?