問題タブ [fibers]

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.

0 投票する
1 に答える
260 参照

ruby - 非同期方式でファイバーを再開する

このコードが機能しない理由を理解できません。私がやろうとしているのは、ファイバーを使用して同期コードの動作をエミュレートすることです。

このコードを実行すると、出力は次のようになります。

ファイバが再開されることはありません。どうすればそれができるか説明していただけますか?

みんなありがとう

0 投票する
2 に答える
470 参照

javascript - Node.js meteor.js ファイバーとループ

さて、私はファイバーを学んでいますが、「ファイバー内のループの終わりを待つ」を実装する方法がわかりません

今、私は問題なく動作するこのコードを持っています。

そして、setTimeoutを置き換える必要があります... FOR ...

全体のポイントは、最初に私がすでにアイテムを所有しているかどうかを確認することです(所有アイテムがtrueです)そして、私はやりたいことは何でもできますが、ownItemがtrueであることを確認する必要があります

0 投票する
1 に答える
482 参照

ruby - ファイバーと明示的な列挙子

私は言語を学ぶために Ruby をいじっています。現在、私は繊維の概念に頭を悩ませようとしています。この回答によると、それらは(無限の)外部列挙子を作成するためにかなり頻繁に使用されます。一方、これはいわゆる明示的な列挙子の概念と重複しているようです。

たとえば、連続する素数を発生させるコード スニペットを書きたいとします (そうです、次のアルゴリズムの実行時間は O(scary) です)。ファイバーを使用して実装できます。

列挙子オブジェクトを作成することは難しくありませんが、これはそれ自体では列挙子オブジェクトを発行しません。対照的に、明示的に定義された列挙子を利用することもできます。これには、既に列挙子オブジェクトであるという追加の利点があります。

どちらの方法でも、ある種のコルーチンを実装することができ、私には交換可能のようです。では、いつどちらを優先するのでしょうか。一般的に合意された慣行はありますか?これらのイディオムをすべて頭に入れるのは難しいと思うので、これがばかげた質問と見なされる場合は、事前にお詫び申し上げます。

0 投票する
1 に答える
184 参照

ruby - ファイバーを使用して REPL を作成する

Rubyのファイバーを使用してREPLを作成しようとしています.1つのファイバーがフロントエンドとして機能し、入力を取得して出力を表示し、バックエンドとして1つのファイバーを使用して、フロントエンドからの入力を処理し、表示用の出力を返します。

(私がこれを行っているのは、漠然と REPL が必要なためでもあり、ファイバーを理解したかったからでもあり、これによりテストが可能になると考えたからでもあります。テスト フレームワークのフロントエンドを置き換えてバックエンドをテストするだけです。逆もまた同様です)。 .

問題は、Fibers ライブラリ全体を実際に使用する方法に関する適切なドキュメントが見つからず、最初の推測がうまくいかないことです。そこで、次の 4 つの質問があります。

  1. これは中途半端な考えですか?ファイバーから REPL を作成しようとすると、大きな問題が発生しますか?
  2. 両方の方法で値を渡す必要があるため、Fibers ライブラリなしでこれを行うことはできないと思います。そうですか?
  3. Ruby Fibres に関するまともな最初からのチュートリアルまたはドキュメントを教えてくれる人はいますか (単方向ジェネレーターのものではなく、ライブラリのように)
  4. 以下が機能しないのはなぜですか?を正しく表示しEnter a string:、入力を繰り返し受け入れます。しかし、入力行を提供するたびに、入力の最初の行が反転して表示されます (明確でない場合に備えて、サンプル出力が含まれています)。

コード:

出力:

0 投票する
1 に答える
933 参照

ruby - シナトラ + ファイバー + EventMachine

ルビーでルートファイバーを一時停止する方法を知りたいです(可能であれば)。

この Sinatra アプリがあり、EventMachine を使用して外部 API への非同期呼び出しを行っています。API が応答するまで、クライアントに応答したくありません。

たとえば、EventMachine コールバックが起動するまで Sinatra でルート ファイバーをスリープ状態にします。

ありがとう。

0 投票する
1 に答える
216 参照

asynchronous - Sinatra でのファイバーと複数の http リクエスト

eventmachine でファイバー モデルを使用して外部 API を呼び出すときに何が起こっているのか理解できません。私はSinatraにこのコードを持っています:

また、2 つの接続を持つコネクタを使用して Rainbows サーバーを起動してい:EventMachineます (つまり、一度に 2 つの HTTP 要求を処理する 2 つのファイバーを意味します)。

ここで、4 つの同時要求を行った場合、アプリは最初に 2 つを管理する必要があり、外部 API 呼び出しが行われている場合、これらのファイバーは、外部呼び出しが完了するのを待っている間に 2 つの新しい http 要求を管理できるはずですよね?

これは起こっていません。slowapi 呼び出しが返されてファイバーが解放されるまで、新しい http 要求は受け入れられません。

これは正しい動作ですか?何か不足していますか?ありがとう。

0 投票する
0 に答える
478 参照

ruby - EM::Synchrony.defer をファイバー対応データベース呼び出しで使用すると、FiberError 例外が発生します

アプリケーションの同時実行に EM-Synchrony を使用しようとしていますが、遅延コードとファイバーの使用で問題が発生しました。

EM.defer または EM::Synchrony.defer 内でデータベースを呼び出すと、アプリケーションがエラーでクラッシュします。can't yield from root fiber

以下は、私が達成しようとしていることの実行可能な例です。最初の印刷は機能して表示されます[:first, 1]が、2番目の印刷は上記のエラーでクラッシュする場所です。

私が最初に考えたのは、おそらく EM::Synchrony.defer 内の Fiber.current と Fiber.yield は、追加の Fiber.new 呼び出しで問題を解決できるということでした。

これも実行に失敗しますが、今回はエラーが発生しますfiber called across threads

0 投票する
1 に答える
739 参照

ruby - ラック以外で ruby​​ eventmachine でファイバーを使用するには?

したがって、基本的に私の目標は、ジョブを処理し、http を介して他のアプリに通知する軽量の Ruby デーモン (または sidekiq/resque ワーカー) を取得することです。アプリ自体は http リクエストを受信する必要がないため、ラックをできるだけ軽量に保つ必要はありません。ループで実行できるかなりの数の Ruby コード{}

そのため、EventMachine のリアクター パターンを使用せず、代わりにファイバー アプローチを使用しようとしています。このコンテキストで EM.run または EM.stop をどこに配置しますか? Thread.new { EM.run }はファイバー対応ではないようです。これに代わるem-synchronyはありますか?

0 投票する
2 に答える
903 参照

ruby - リアクターをブロックせずに EventMachine で同期長時間実行操作を実行するにはどうすればよいですか?

一連の を指定された順序で実行したいと考えてProcいます (つまり、非同期で実行することはできません)。それらのいくつかは、任意に長い時間がかかる場合があります。

私のコードは、EventMachine リアクタのコンテキスト内で実行されています。メインリアクタをブロックせずにこの種のコードを書くための既知のイディオムはありますか?

0 投票する
0 に答える
808 参照

node.js - どうすればmongo-syncを使用できますか?

git からmongo-syncを取得したので、readme で試してみます。

私はそのようにtest.jsをコーディングしています:

私はcommon-node test.jsよく走る

それから私はリターンを得ました:

私のコードの何が問題になっていますか?

これはmongo-syncのリンクです

これは monog-sync/lib/mongo-sync.js のコードを壊しています: