この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 14970|答える: 3

[出典] [実戦]。 NET/C#はSemaphoreSlimを使って並行実行メソッドを制限しています

[リンクをコピー]
掲載地 2022/02/19 21:23:20 | | | |
要件:ハードウェアのリソースが限られているため、プログラムは一定量のハードウェアリソースを消費する必要があります。高並行性の場合、プログラムのリソースを過剰に消費するメソッドが制限されない場合(大量のデータをExcelテーブルにエクスポートする場合)、プログラム全体の通常のサービスを提供できなくなり、オペレーティングシステムの通常の動作にも影響を及ぼす可能性があります。

セマフォアとセマフォアスリムの違い

SemaphoreSlimとSemaphoreは機能面で似ています。 SemaphoreSlimはSemaphoreの約4倍の速度ですが、プロセス間シグナリングには使用できません。

パフォーマンス向上の理由は、SemaphoreSlimクラスがWindowsカーネルのセマフォアを使わないSemaphoreクラスの軽量な代替手段を提供するためです。 基本的に、セマフォに名前を付ける必要がなければ、SemaphoreSlimクラスを使えばいいです。

SemaphoreSlimはSpinWaitとMonitorをベースにしているため、ロックを待つスレッドはCPUサイクルの一定期間を消費し、ロックを取得してから別のスレッドに譲ることを期待します。 もしこれが起こらなければ、スレッドはシステムがコンテキストを切り替え、OSが再度スレッドをスケジューリングしたときに再挑戦できるようにします(CPUサイクルを消費して)。 待ち時間が長いと、このモードは多くのCPUサイクルを消費することがあります。 この実装の最良のケースは、ほとんどの場合待ち時間がなく、ほぼ即座にロックを取得できることです。
SemaphoreはOSカーネル内の実装に依存しているため、ロックを取得するたびにかなりのCPUサイクルがかかりますが、その後スレッドは単に休止状態に入り、ロックを取得するまでの時間を稼ぎます。

セマフォ文書化:https://docs.microsoft.com/en-us ... aphore?view=net-6.0
SemaphoreSlimドキュメント:https://docs.microsoft.com/en-us ... reslim?view=net-6.0

メソッドを実行する前に、一般的に使われる待機方法は以下の通りですご自身のビジネスの実際の状況に応じて電話をかけてください

Wait(): スレッドがSemaphoreSlimに入るまでブロックします。
wait(0): メソッドはブロックされません。 待機中の対応者の状態をテストし、すぐに戻ります。
待機:現在のスレッドがSemaphoreSlimに入るまでブロックし、32ビット署名付き整数でタイムアウトを指定します。

ソースコードは以下の通りです:

レンダリングは以下の通りです:







先の:Linuxのシークレットレスログイン(ssh)またはシークレットレスコピー(scp)ファイルから他のサーバーへ
次に:Linuxはlookbusyを使ってCPU使用量をシミュレートしています
掲載地 2022/02/19 23:16:57 |
学ぶことを...
掲載地 2022/02/20 22:19:24 |
試験
 地主| 掲載地 2024/12/18 20:40:10 |
C#スレッドが学習するManualResetEventとAutoResetEventの違い
https://www.itsvse.com/thread-4810-1-1.html
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com