問題タブ [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.
c++ - ファイバー用の効率的な C++ コードの設計
ゲーム コードでファイバーを最大限に活用するにはどうすればよいですか? リソース (つまり、ディスクからのファイル) をロードする際に、プリエンプティブでないコンテキスト スイッチを管理するためにのみ使用する必要がありますか? それとも、すべてのタイプのゲーム エンティティをファイバーで実行できるようにする必要がありますか? スケジュールを立てるにはどうすればよいですか?
C++ または疑似コードのサンプルは大歓迎です!
setjmp - シグナルハンドラとsetjmp/longjmpを使用したプリエンプティブマイクロスレッドの実装
Linux環境でPOSIX準拠のマイクロスレッドを実装したいと思います。基本的な考え方は次のとおりです。
- ここで説明する手法を使用して、各ファイバーに新しいスタックスペースを割り当てます。
- setitimerを使用して、一定の時間間隔で信号を送信するタイマーを作成します。このタイマーのシグナルハンドラーは、スケジューラーとして機能し、ファイバーを切り替えます。
問題は、シグナルハンドラーでlongjmpを実行してもハンドラーが終了しないため、カーネルは新しいシグナルを配信する代わりに、ハンドラーの終了を待機することです。これにより、切り替えを開始する信号がないため、コンテキストの切り替えが不可能になります。1つの解決策は、SIGALRMのブロックを解除することです。これにより、多くのシグナルが同時にハンドラーを実行できますが、これにより競合状態の問題が発生します。
プリエンプティブマイクロスレッドを実装するための最良かつ最も簡単な方法は何ですか?私がGoogleで見つけたすべての例は、先制的ではありませんでした。
c# - シングルスレッドAPIのイベントハンドラーでのスリープに対処する最良の方法は?
スレッドセーフではないイベントAPIを使用しています。wait()
が呼び出され、その呼び出しからイベントハンドラーがディスパッチされます。イベントハンドラー内で、しばらくの間「スリープ」できるようにしたいと思います。現在、関数を後で呼び出すようにスケジュールするスケジューラーがあり、Scheduler.Sleeper(some_ienumerator)をイベントハンドラーとして使用できるようにするちょっとしたハックがあるので、一種のスリープとしてタイムスパンを生成できます。より良い解決策はありますか?C#にRubyスタイルのファイバーがある場合、スケジューラーに呼び出すことができるSleep()関数を持たせることができ、スリープ機能は、ハンドラーから直接ではなく、イベントハンドラーによって呼び出される関数に含めることができます。使いやすいファイバーがないので、他にできることはありますか?
明確化のための編集:wait(n)
ここでnは時間の長さであり、その待機呼び出し中に、APIはイベントハンドラーを呼び出します。これらのハンドラーの一部で「スリープ」したい理由は、これがゲーム用であり、何かをクリックした後、オブジェクトがたとえば1秒間光る場合があるためです。
ruby - 単純なneverblockの例は機能しません
「neverblock」で何かをしようとしていますが、うまくいかないようです。
私が期待すること:睡眠をブロックしても、プロセス全体が遅くなることはありません。基本的に同じタイムスタンプで5回の「bla」が表示されると予想しました。
ルビー:
コード:
結果:
ruby - Rubyファイバーを並行させることはできますか?
プログラムの速度を上げようとしていますが、Rubyファイバーはスレッドよりも高速で、複数のコアを利用できると言われています。周りを見回しましたが、実際に異なるファイバーを同時に実行する方法がわかりません。スレッドを使用すると、これを行うことができます。
繊維を使ってこのようなことをする方法がわかりません。私が見つけることができるのは、ファイバー間の開始yield
とresume
停止の束のように見えることだけです。ファイバーで真の並行性を実現する方法はありますか?
ruby - ファイバーを使用したRubyのステートマシン?
私はFiber
Ruby 1.9 の新しいクラスのハンドルを取得しようとしていますが、 Fibers
(およびコルーチン) のより一般的なアプリケーションの 1 つがステート マシンにあることを読みました。
残念ながら、私のFiber
-fu はそれほど多くはありませんFiber
。
ありがとう :)
python - Python のファイバー
Python でファイバーを実装する非常に簡単な方法を探しています。ジェネレーターを使用してそれを行うための本当に簡単な方法があると確信していますが、私の心は私にうんざりしています。これは大規模なアプリケーション向けではないので、Diesel や Tornado や Twisted のような奇抜さ (またはオーバーヘッド) は必要ありません。ファイバーをうまく処理するちょっとした方法が必要なだけです。アイデア/提案はありますか?
ruby - ノコギリvsゴリアテ…いや、仲直りできるのか?
文字通り何十万もの HTML および XML ドキュメントを解析する必要があるプロジェクトがあります。
これは、Ruby ファイバーと新しい Goliath フレームワークを学ぶ絶好の機会だと思いました。
しかし、明らかに、ブロッキング ライブラリを使用すると、Goliath は横ばいになります。しかし、問題は、「スレッドセーフ」とは何かを判断する方法がわからないことです (それが Goliath の正しい用語でさえある場合)。
私の質問は、Nokogiri は Goliath やマルチスレッド/ファイバー全般で問題を引き起こすのでしょうか?
だとしたら、ノコギリよりも安全なものはありますか?
ありがとう
ruby - なぜRuby 1.9の継続は悪なのでしょうか?
私はRubyの世界では比較的新しいです。そして、私は何を考えるべきかわかりません。「The Ruby Programming Language」では、新しいコードでは継続を使用せず、代わりにファイバーを使用するべきだと読みました。このプレゼンテーションを見つけました (2008 年から) http://www.atdot.net/~ko1/pub/ContinuationFest-ruby.pdfつまり、Continations は壊れており、Ruby の実装の作成者は犯罪者です。一方、著者が継続について興奮を示していて、継続のバグについては何も悲しんでいないブログをいくつか読みました。だから私は何を考えるべきか分からない。継続の代わりにファイバーを使用する方が良いことはわかっていますが、ファイバーが十分でない場合はどうすればよいですか? Continuations を使用できますか、それとも壊れていますか (2008 年のプレゼンテーションで説明されています)? なぜ Matz は標準ライブラリへの継続をキックしたのですか? なぜ投票があるのですか?彼はそれをRubyから追い出しますか?
ruby - 無限のルビーファイバー?
お互いを永遠に呼び合う 2 つの Ruby のファイバーを作成することは可能ですか? Ruby は最終的にスタック オーバーフローでクラッシュするのでしょうか、それともファイバーはスタック スペースを消費しませんか?