具体的には、コンテキストスイッチングのパフォーマンス低下は、待機状態のスレッドに適用されますか?
ManualResetEventまたはWaitHandleは、どのような条件または状況でリソースを消費する可能性がありますか?
具体的には、コンテキストスイッチングのパフォーマンス低下は、待機状態のスレッドに適用されますか?
ManualResetEventまたはWaitHandleは、どのような条件または状況でリソースを消費する可能性がありますか?
ManualResetEventには待機状態がありません。MREで待機できるのはスレッドだけです。そして、はい、スレッドは、コードを実行するために行われたことを実行していないときに、不必要に多くの貴重なリソースを消費します。メガバイトの仮想メモリと少数のカーネルオブジェクト。MREが消費する単一のカーネルオブジェクトは、それに比べて小さなジャガイモです。
通常、代わりにスレッドプールスレッドを使用します。
そして、.NET4.0で利用できるものを見てください。ManualResetEventSlim(OSオブジェクトに基づかない)やTaskクラスと同様です。
ManualResetEventの場合、いいえ。スレッドは実際にはループしていません。ManualResetEventの通知リストにそれ自体への参照が詰め込まれています。別のスレッドがManualResetEventで.Setを呼び出すと、その別のスレッドは待機中のスレッドをアクティブキューに戻すことになります。
消費されるリソースは、単にスレッドの存在を説明するものです。スタック、記録されているカーネルリソース、保存されたレジスタなどです。ここで、話しているスレッドがManualResetEventを使用しておらず、代わりに待機ループを使用している場合ある種の、そして確かに。
現在、WaitHandleは実装ではありません。これは単なる抽象的なAPIです。WaitHandleの他の実装がどのように機能するかはわかりません。