問題タブ [nanotime]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - python time.time() を java.nanoTime() に変換します
java の System.nanoTime() は long: 13372038742311141000L を与えるようですが、python time.time() は 1337203880.462787 のようなものを与えます
time.time() の値を System.nanoTime() に一致するものに変換するにはどうすればよいですか?
java - メソッドを比較すると、Javaでnanotimeを使用してパフォーマンスが向上します
以下に示すように、2つのreadDataMethod()の速度パフォーマンス(存在する場合)を比較したいと思います。
ほとんどの場合、私が得た結果は、方法2の値が「低い」ことを示しています。
このテストは、readDataMethod2が以前のものよりも高速であることを証明していますか?
java - System.nanoTime()の精度と精度
のドキュメントにSystem.nanoTime()
は次のように書かれています(私の強調)。
この方法は経過時間を測定するためにのみ使用でき、システムや実時間のその他の概念とは関係ありません。返される値は、固定されているが任意の時間からのナノ秒を表します(おそらく将来的には、値が負になる可能性があります)。この方法はナノ秒の精度を提供しますが、必ずしもナノ秒の精度である必要はありません。値が変更される頻度については保証されません。
私が見ているように、これは2つの異なる方法で解釈できます。
上記の太字の文は、個々の戻り値を示しています。次に、精度と精度を数値の意味で理解する必要があります。つまり、精度は有効桁数(切り捨ての位置)を指し、精度はその数値が正しいかどうかを示します( 「精度」と「精度」の違いは何ですか?)
上記の太字の文は、メソッド自体の機能を示しています。次に、ダートボードのアナロジー(http://en.wikipedia.org/wiki/Precision_vs._accuracy#Accuracy_versus_precision:_the_target_analogy)に示されているように、精度と精度を理解する必要があります。したがって、低精度、高精度=>間違った値が高精度で繰り返しヒットされます。物理時間が静止していると想像すると、nanoTime()を連続して呼び出すと同じ数値が返されますが、実際の経過時間とは異なります。一定のオフセットによる基準時間。
正しい解釈はどれですか?私のポイントは、解釈2は、nanoTime()を使用した時間差の測定(2つの戻り値を差し引くことによる)がナノ秒に正しいことを意味します(測定の一定のエラー/オフセットが排除されるため)が、解釈1は測定間のこの種のコンプライアンスを保証するものではないため、必ずしも時間差測定の高精度を意味するわけではありません。
2013年4月15日更新:のJava 7ドキュメントSystem.nanoTime()
が更新され、以前の表現との混同の可能性に対処しました。
実行中のJava仮想マシンの高解像度タイムソースの現在の値をナノ秒単位で返します。
この方法は経過時間を測定するためにのみ使用でき、システムや実時間のその他の概念とは関係ありません。返される値は、固定されているが任意の起点時刻からのナノ秒を表します(おそらく将来的には、値が負になる可能性があります)。同じオリジンが、Java仮想マシンのインスタンスでのこのメソッドのすべての呼び出しで使用されます。他の仮想マシンインスタンスは、異なるオリジンを使用する可能性があります。
この方法はナノ秒の精度を提供しますが、必ずしもナノ秒の解像度(つまり、値が変化する頻度)ではありません。解像度が少なくとも。の解像度と同じである場合を除いて、保証は行われません
currentTimeMillis()
。約292年(2 63ナノ秒)を超える連続した呼び出しの違いは、数値のオーバーフローのために経過時間を正しく計算しません。
このメソッドによって返される値は、Java仮想マシンの同じインスタンス内で取得された2つのそのような値の差が計算された場合にのみ意味があります。
java - 100 ナノ秒などの短い時間、Java スレッドを一時停止するにはどうすればよいですか?
Thread.sleep()は、特定のミリ秒や特定のナノ秒のように、Java スレッドをしばらく中断させることができることを知っています。しかし問題は、この関数の呼び出しによってオーバーヘッドが発生することです。
たとえば、スレッドを 100 ナノ秒中断させたい場合、Thread.sleep(0, 100)を呼び出します。このプロセスの全コストはinvocation_cost + 100 nanosceondsであり、これは私が望むよりもはるかに大きい可能性があります。どうすればこの問題を回避し、目的を達成できますか?
これが必要な理由は、シミュレーションをオフラインで行いたいからです。タスクの実行時間をプロファイリングしました。ここで、スレッドを同じ期間中断することで、この実行時間をシミュレートしたいと考えています。
ありがとう!
java - コンストラクターの最初の呼び出しに他の呼び出しよりも 10 倍の時間がかかるのはなぜですか?
私はいつも this のような結果を得ます7806 660 517
。最初の呼び出しに他の呼び出しの 10 倍の時間がかかるのはなぜですか?
android - Android - インテントを介してアクティビティを開いてから結果を受け取るまでの時間を測定する
ZXing によるバーコード スキャナー アプリを開く簡単なアプリケーションがあります。
ここで、スキャンが完了するまでにかかる時間を知りたいと思います。基本的にはインテントを起動してから結果が出るまで。インテントが実行されるときに nanoTime オブジェクトを配置し、結果を取得するときに別の nanoTime オブジェクトを配置し、2 を減算して乗算し、秒/ミリ秒で取得するだけです。
ただし、一連の QR コードをスキャンしたいので、for ループが最適な方法であると判断したため、ループを意図しています。
だから私はいくつかのグローバル時間変数長い開始、終了、時間を持っています。
インテントのコードは次のとおりです。
そして、ここに入力を取得するコードがあります。
タイマーをどこに置くべきかわからないので、タイマーを開始する部分をコメントアウトしました。ループの前にそれを呼び出すと、結果は 1 つしか得られず、ループ内に置くと、互いにそれほど遠くない複数の結果が得られます。
インテントが 1 回だけ呼び出された場合は、インテントが終了するまでの時間を取得するのは簡単ですが、ループで複数回呼び出された場合は注意が必要です。
では、意図を開いて結果を得るために必要な時間を適切に取る方法はありますか? アクティビティを複数回呼び出す方法を書き直すことを意味する場合でも、提案を受け付けています(現在ループを使用しています)。
また、コードがスキャンされた直後に時間を取得できるようにしたいので、アクティビティの呼び出しとアクティビティの結果の間の時間がわかります。各通話が終了するのにかかった時間を取得する前に、各通話が終了するのを待ちたくありません。リアルタイム更新を希望します。ありがとう。
java - データベースで挿入にかかる時間を測定しようとしています
私はMultithreaded program
自分のテーブルの1つに挿入するものを持っており、そのプログラムはこのように実行しています-
java -jar CannedTest.jar 100 10000
つまり:
- スレッド数は
100
- タスク数は
10000
したがって、各スレッドが10000 records
テーブルに挿入されます。したがってtotal count (100 * 10000)
、テーブルの意味は、1,000,000
プログラムの実行が終了した後でなければなりません。
LnP テストの一環として、テーブルへの挿入にかかる時間を測定しようとしています。ConcurrentHashMap
以下のように、データベースへの挿入にかかる時間のように、これらすべての数値を保存しています。
すべてのスレッドがすべてのタスクの実行を終了したら、次のようにConcurrentHashMap insertHistogram
並べ替えて数字を出力しようとするKey
と、以下Milliseconds
のような結果が得られます-
また、同じConcurrentHashMap insertHistogram
ことから、以下のようなヒストグラムを作成しようとしました。
注:- レコードを挿入しようとしているデータベースは、Memory Only
現在モードになっています。
問題文:-
上記の結果でこの番号を見てください。これは、キーでソートして出力します-
0 2335
2335 calls
に挿入された可能性があるかどうかはわかりませんか0 milliseconds
? またSystem.nanotime
、インサートを測定しながら使用しています。
以下は、上記のログを出力するコードです-
0
キーで並べ替えて Map から値を直接出力しようとすると、ミリ秒が表示される理由がわかりません。
しかし、同じ0 milliseconds
でヒストグラムを作成しようとすると、同じことが表示されませんlogHistogramInfo method
。
上記の方法の計算プロセスで何か間違ったことはありますか?
java - Guava Stopwatchクラスの利点は何ですか?
Google GuavaライブラリにはStopwatch
クラスがあり、そのドキュメントには次のように記載されています-
経過時間をナノ秒単位で測定するオブジェクト。
System.nanoTime()
いくつかの理由から、への直接呼び出しの代わりに、このクラスを使用して経過時間を測定すると便利です 。
- テストまたはパフォーマンス上の理由から、代替のタイムソースに置き換えることができます。
- によって文書化されているよう
nanoTime
に、返される値には絶対的な意味はなく、別の時間にnanoTimeによって返される別のタイムスタンプに関連するものとしてのみ解釈できます。Stopwatch
絶対値ではなく、これらの相対値のみを公開するため、より効果的な抽象化です。
質問-彼らが言及しているこの「代替の時間源」とは何ですか?また、JRE / JVMはこのオプションも提供しますか?
java - 非常に正確な繰り返し/継続的なコード実行
私の会社では、UDP を介して、私たちの管理下にないリモート システムにデータを送信する必要があるプログラムがあります。
データは7981859ns (=7.98 ミリ秒) +/- 0.001ms ごとに送信する必要があります。
悲しいことに、データを送信するのが遅すぎると、そのリモート システムの古いバージョンが機能しなくなります。また、送信が速すぎたり早すぎたりすると、データが不足します (リアルタイム データ生成)。
現時点では、UDP パケットを次の方法で送信しています。
ログを追加すると、データが 6 ミリ秒から 11 ミリ秒の間に送信されていることがわかります。これは、私たちにとっては大きすぎる範囲です。
これを最適化する方法を考えました。
最後の送信のナノタイムスタンプで変数を設定することは可能でしょうか (どのようにそれを取得しますか?私は知っています。System.currentTimeMillis())
ループを少し速く実行し (または単にループでwhile(true)
)、「currentNanoTime - lastNanoTime > 7981859」まで待ちます)。send(..)
?を実行する前に
私の問題は、ナノ秒、ミリ秒だけ待つ方法が見つからなかったことです。
python - ナノ秒のエポック時間を人間が読める形式に変換するにはどうすればよいですか?
エポックタイムにナノ秒のタイムスタンプがあります。たとえば1360287003083988472
、1970-01-01以降のナノ秒です。
Pythonの日時オブジェクトと変換メソッドは、最大ミリ秒の精度しかサポートしていません。
このエポック時間を人間が読める時間に変換する簡単な方法はありますか?