2016-10-05 7 views
6

データをキューにプッシュするスレッドと、キューからデータを読み込んで処理するスレッドがあります。私は、データが処理されるまでにキュー内にどれくらいの時間置かれているか確認したいと思います。スレッド間でnanoTimeを動作させることができます

最初のスレッドがプッシュする前にデータに時間パラメータ(System.nanoTime()を使用して計算)を追加しました。 2番目のスレッドが処理すると、System.nanoTime()が計算され、前回のデータセットとの差分が求められます。

これは正常に動作しますか?私はログにマイナスの違いが見えているので、これを尋ねています。

UPDATE

私は、開始時刻が異なるマシンの処理によって置かれ、その差が別のマシンで計算された、ことを明らかにしたいと思います。

+0

は、単一のマシン上にあるキューのですか?代わりにキューの時間を測定できませんか? – nandsito

+0

キューはredisです。どのようにしてキューの時間を測定できますか? – cppcoder

答えて

3

スレッドとプロセスの間でSystem.nanoTime()を使用しました。 1台のマシンでは、グローバルで単調に増加します(マルチソケットWindows XPを除く)

マイナスの差異がある場合は、おそらくコード内のバグです。

マシン間でnanoTime()を見ることができますが、クロックの違いとドリフトを調整する必要があります。

プロセスによって別のマシンに開始時刻を入れ、その差異を別のマシンで計算します。あなたは通常、NTPとミリ秒まで正確であるのいずれか

  • 使用System.currentTimjeMillis()に必要なマシン間

  • 往復にSystem.nanoTime()を使用します。つまり、A ro Bから別のメッセージをAに送信します。これから半ラウンドトリップ時間を見積もることができます。
  • System.nanoTime()は、経過時間ではなく、ジッタを検出するために使用します。これは、ほとんどの場合、遅延が許容できる(たとえば10〜100マイクロ秒)と仮定していますが、時にはそれが通常よりもはるかに高いです。このクラスを使用してジッタを検出します。 RunningMinimum
  • あなたは私がにcurrentTimeMillisを(使用したマルチミリ秒の遅延にのみ関心がある場合)

    +0

    これはまさに私が直面していることだと思います。マシン間の違いを調整する方法を教えてください。 – cppcoder

    +0

    私は 'nanoTime'をマシン間でやってみようとしていて、プロセス間でさえそれは偶然にしか働かない(作業する必要はありません)と思っています。 –

    +0

    マシン間で経過時間を見つける他のメカニズムはありますか? – cppcoder

    関連する問題