2009-06-27 11 views
1

複数のタイマーと複数のスレッドの違いは何ですか?Windowsサービスとタイマー - 別々のプロセス?

私はバックグラウンドで動作するWindowsサービスを持っています。 initにロードされるデータベースには、約10の「サイト」があります。各サイトは独自のTimerオブジェクトで初期化され、Timerは各サイトのインターバルでコードを実行します。実行されるコードは、メインサービスクラスの静的メソッドからのものです。

2台のタイマーを同時に実行しているとどうなりますか?彼らは同じプロセスで実行していますか? 2番目のタイマーは、最初のタイマーがメソッドを終了するのを待たなければ入力できませんか?心配するロックや競争条件はありますか?

洞察をいただきありがとうございます。

答えて

0

これは.NETの質問であると仮定します。

タイマは、アプリケーションのスレッドプール内にある共有スレッドを使用します。

スレッドプールがスレッドを使い果たしていない限り、複数のタイマーコールバックが同時に実行されます。

専用スレッドを使用してこれと比較してください。専用スレッドは常にコードを実行するために使用できますが、プール内のスレッドと同様に共有されないため、専用スレッドはリソースを結び付けます。

0

まず第一に、私はあなたがスレッドとプロセスの間に差があると認識する必要があると思う、簡単にGoogleは、スタックオーバーフローの中に続いて、この

http://www.dotnetuncle.com/Difference/146_thread_process.aspx

を思い付いた

Do .NET Timers Run Asynchronously?

このquetionました

したがって、

自分のスレッド上のタイマーは待つ必要がありません他のタイマーが実行できるようになる前に終了するには、マルチスレッドのように、複数のタイマーが使用するリソースをロックし、競合状態が発生する可能性があることを考慮する必要があります。

+0

雅、新しいタイマーを作成すると ...私は...ないプロセス をスレッドを意味...そう、「自分自身のスレッドでタイマー...」に関する部分は、問題の核心になり、 .NETは自動的に独自のスレッドでそれらを実行しますか? binarycoderによると、それらはデフォルトで共有スレッドプールで実行され、明示的にそれらをスレッドする必要はありません。 しかし、これは、明示的なスレッドが作成されていない場合でも、同時にアクセスしたくないコードをロックする必要があることを意味します。 –

+1

正確に - ほとんどの.Netタイマーは、スレッドプールから独自のスレッドで実行され、一度は独自のスレッドで明示的または暗黙的に実行されます。ロックなどに関しては同じ注意が必要です。 – Tetraneutron

関連する問題