問題タブ [spinwait]
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# - 新しいスレッドが生成されるのを待っている間に thread.sleep() を呼び出す
この質問は「SpinWait vs. Block?」に要約できると思いますが、ほぼすべての C# スレッド化チュートリアルで次の呼び出しが提案されている理由について、もっと興味深い答えがあるかもしれないと思いました。
次のようにブロックするのとは対照的に:
私の非常に力ずくのテスト (DateTime.Ticks への呼び出しで while ループを囲む) では、実際には何も明らかになりません (両方のインスタンスで差が 0 ティックであると言います)。
紡績がより効率的になるように、スレッド作成プロセスは十分に短いですか? それとも、ほとんどのチュートリアルでは回転を推奨していますか?
.net - スピンロックまたはスピンウェイトを使用する .Net フレームワークの例はありますか?
並行コレクションを見てみましたが、ボンネットの下で通常のロックを使用しているようです。このロック構造を使用する .Net フレームワークに良い例はありますか?
私は最初に ConcurrentDictionary を見ました。通常のロックを使用していることがわかりましたが、BlockingCollection クラスは内部メソッドで SpinWait を使用しています。
.net - 電力を維持するSpinWait
C#にポーリングループがあり、平均 して100マイクロ秒ごとにポーリングする必要があります<EDIT>(もちろん、コア不足のためにWindowsによって実行される過度のプリエンプティブスレッドコンテキストスイッチがない場合)</EDIT>。
スケジュールを変更する時間がないため、Sleep(1)はスケジュールを変更しません。
そこで、スレッド(実際にはアフィニティを設定するときのコア)を専用にし、各反復の一連のサイクルにThread.SpinWaitを使用することにしました。これは正常に機能しますが、不必要な量の電力を消費します。100マイクロ秒は、CPUが一時停止するのに十分です(Windowsのタイムスライスが長くなるため、スレッドをスケジューラーから一時的に削除するのに十分ではありません)。
代わりに、Intel PAUSE命令を使用することを考えていましたが、IntelCPUがハードウェアスレッドを一時停止するトリガーになるかどうかはわかりません。Intelは、電力を維持し、スピンループで使用する必要があると主張していますが、一時停止は100マイクロ秒にもなるため、コアをC1モードでスリープ状態にする必要があります。
何か案は?
編集:サードパーティのAPIをポーリングしているので、ブロックする同期イベントはありません。
nutch - ナットクロールがスピン待機またはアクティブでスタックします。フェッチサイクルを減らす方法は?
Nutch 2.1 を使用してサイトをクロールしています。問題は、クローラーが取得中の URL のスピン待機中/アクティブを表示し続け、取得に非常に時間がかかるため、mysql への接続がタイムアウトになることです。mysql がタイムアウトしないように、一度にフェッチする回数を減らすにはどうすればよいですか?? 100 または 500 の URL のみをフェッチし、解析して mysql に保存し、次の 100 または 500 の URL を再度フェッチすると言うことができる設定はありますか??
エラーメッセージ:
c# - NET 4.0 の SpinWait メソッドは 4.0 より前の SpinWait() とどう違うのですか?
MSDNの「スレッド セーフ コレクション .NET Framework 4」には次のように記載 されています。
「一部の並行コレクション型は、.NET Framework 4 の新 機能であるSpinLock、SpinWait、 SemaphoreSlim、およびCountdownEventなどの軽量同期メカニズムを使用します」
一方、MSDN の Web サイトでは、SpinWaitwas は .NET 1.1 まで利用可能でしたが、別の MSDN の記事では、SpinWaitwas が .NET 4.0 から開始されています。
さて、興味深いのは、Lee Grissom のコメントによる回答です。SynchronizedCollectionと他の同時実行コレクションの違いは何ですか? :
「@Matt、.NET4 並行クラスは
SpinWait
オブジェクトを使用して、Monitor.Enter/Exit (別名クリティカル セクション) の代わりにスレッド セーフに対処しますか?」
SpinWait
.NET 4.0 の新機能 であると述べている最初の NSDN の引用と同様に
それで、それは新しいですか?
そして、新しい場合、どのように?
c# - For ループの乱数
こんにちは、インターネットでこの回答を検索しました。実際の問題に入る前に説明させてください。簡単に思えるかもしれませんが、本当に私を助けた唯一の選択肢は Thread.Sleep と Thread.SpinWait でしたが、基本的にスリープ中にプログラムを停止し、スピン待機でも、秒数などの特定の時間を置くことはできませんその上。組み込みのタイマーも使用しようとしましたが、コールバックタイマーを取得/作成する方法や、タイマーの作成に必要なものがわかりませんでした。また、カウントダウンまたはカウントアップのために機能する他のプロジェクトのwhileループ(下記)で単純なタイマーを使用したので、ここでも試しましたが、ここでは機能しませんでした
.
これが私が3週間以上抱えている実際の問題であり、Google、フォーラム、ヘルプサイトなどを使用してインターネットで検索することでさらに混乱するだけです.互いに比較的近いいくつかの数値を生成しています.私は同じ数を連続して取得するので、上記のようにスリープと待機タイマーを使用しましたが、これが最もうまく機能しましたが、それらの欠陥により、それらを使用したくないか、正しく使用できません。以下のこのコードは、for ループで呼び出される関数で乱数を使用し、同じ数を何度も取得する 1 つの例にすぎません。
ここでルーレット関数を呼び出しています。
ご覧のとおり、これにより新しい数値が生成されるため、残念ながら、描画関数などのプログラムの他の領域がスリープしている間は変更されません(必要です)が、使用したタイマーは変更されましたcount は適切な値に到達しますが、ランダムな値が作成されたときに実際に停止または遅延しませんでした (while ループが少し役立つと思いました)。ランダムが時間に依存する方法を認識しており、これは依存関係の副作用です。また、このソリューションを検索して訪れたサイトでシードという用語をよく耳にしました。ランダムまたはランダムの値を変更するためにそれを取得できるものをシードすることで、ある程度理解しています。
では、プログラムの残りの部分を停止することなく、これを必要な方法で機能させるにはどうすればよいですか (一部の言語またはエンジンには、プログラムのこの部分の遅延として機能する待機タイマーがあり、unity の waitforseconds のようにのみ機能します)。
私の言葉遣いがおかしくなったらごめんなさい。私はこれで多くの問題を抱えています。ここでは午前 2 時 30 分くらいで、この問題で眠れません。
c++ - Linux および Mac OS X 上の Windows .NET (C++) SpinWait に相当するものは何ですか?
Windows .NET (C++) は、YIELD/PAUSE 命令でハイパースレッディングに適したビジー待機のために SpinWait を提供します。Linux と Mac OS X で同等の機能は何ですか? システム コールが利用できない場合、ユーザー空間で同等のものをどのように実装できますか?
Windows Thread::SpinWaitを参照してください
スピン待機に関するパフォーマンスの問題については、ハイパースレッディング テクノロジ対応インテル プロセッサでの長時間のスピン待機ループを参照してください。
c# - ロックレス更新での SpinWait
Albahari の Threading in C#を読んでいるときに、「ロック フリー アップデート」パターンSpinWait
がサイクルの最後に a を使用していることに気付きました。
spinWait.SpinOnce()
最後の呼び出しに注意してください。この呼び出しは、シングルスレッド環境でスレッドを生成するためだけに必要ですか、それとも別の目的がありますか?