問題タブ [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.
multithreading - 先物が CPU を最大にしないのはなぜですか?
同じファイルをダウンロードするために数百のリクエストを作成しています(これはおもちゃの例です)。Go で同等のロジックを実行すると、200% の CPU 使用率が得られ、800 の要求で約 5 秒で戻ります。要求が 100 しかない Rust では、5 秒近くかかり、CPU 使用率が 37% の 16 の OS スレッドが生成されます。
なぜこのような違いがあるのですか?
私が理解していることから、N 個のコアにわたって s をCpuPool
管理している場合、これは機能的には Go ランタイム/ゴルーチン コンボが行っていることであり、先物ではなくファイバーを介して行われます。Future
パフォーマンス データから、1 つのコアしか使用していないように見えThreadPoolExecutor
ます。
c++ - boost::fiber スケジューリング - いつ、どのように
ドキュメントによると
現在実行中のファイバーは、マネージャーに制御を渡す何らかの操作を呼び出すまで、制御を保持します。
考えられる操作は 1 つだけboost::this_fiber::yield
です。これにより、ファイバーからファイバーへの制御の切り替えが発生する可能性があります。ただし、次のようなものを実行すると
次のような出力が得られます
バン!バン!
\n
\n
<<
これは、オペレータ間で、あるファイバから別のファイバへと制御が渡されたことを意味します。それはどのように起こりますか?なんで?boost::fiber
ライブラリのコンテキストで、ファイバーからファイバーへの制御の受け渡しの一般的な定義は何ですか?
EDIT001: コードなしでは逃げられない:
出力
2 - 1 - -ナン
0.503334 3 - 4 - 0.861055
0.971884 5 - 6 - 0.968536 -
ナン 7 - 8 - 0.921959
0.9580699
- 10 - 0.948075
0.961811
c++ - ブースト ファイバー work_steal バリアが segfault を引き起こす
これは、ファイバーの work_stealing アルゴで使用するワーカー スレッドを生成する方法について、ブースト ドキュメントのどこかで見つけた例の完成版です。
これにより、ほとんどの場合セグメンテーション違反が発生しますが、その理由はわかりません。
ここにcmakeファイル:
Fedora 28 を実行しており、gcc 8.1.1 を使用してソースから Boost をビルドしましたが、インストールしませんでした。プロジェクトは同じコンパイラでビルドされます。(libc++ はどこにもインストールされていません。) 1_67_0 と同様に、git ブランチ master と development で同じ動作が得られます。ここで明らかな何かが欠けているように感じます。