0

私は、stackoverflow と呼ばれるページのバッジ システムに関するこのブログEasy Background Tasksを読んでいました:P というコメントで、タスクを実行するサービスで終了したと書かれていますが、たとえば:

ユーザーは時間 T1 でアクションを実行します。このアクションは X 人のユーザーに依存します。時間 T2 の後、いくつかのデータベース クエリを実行し、ユーザーに通知する必要があります (電子メールなど)。

これはリアルタイムの経験のためです。ここでの質問は、スレッドを使用する場合、アクションを実行する 1000 人のユーザーがいるとすると、1000 の待機中のスレッドがあるとします。サーバーが何らかの理由でシャットダウンすると、このタスクはすべて失われます。タイマーを使用すると同じ状況で終了します

オンライン ゲームなどのサービスを使用すると、リアルタイムのエクスペリエンスが失われます。

では、このようなものにどう対処すればよいのでしょうか。

4

1 に答える 1

3

スレッドとシグナリングを使用するときは注意が必要です。ソリューションはシナリオの詳細に依存しますが、スケーラブルなソリューションの 1 つはポーリングです。

シナリオに基づくと、スレッドプールで使用できるスレッドの数は常に限られているため、スレッド間のシグナリングは効率的ではありません。ただし、(ゲームの設計に応じて) スレッドを保持するユーザーの最大数がわかっている場合は、WaitHandles (AutoResetEvent および/または ManualResetEvent) を使用してシグナルを送信し、スレッド間でシグナルを送信できます。ただし、Global.asax の Application_Start イベント ハンドラーで、プール内の使用可能なスレッドの数を増やしたことを確認してください。

            int availableThreads;

            int availablePorts;

            ThreadPool.GetAvailableThreads(out availableThreads, out availablePorts);

            ThreadPool.SetMinThreads(availableThreads, availablePorts);

それが役に立てば幸い。

于 2012-09-23T11:45:55.467 に答える