我想将时间戳以秒为单位转换为以毫秒为单位的时间戳。以下是我的天真做法。java将时间戳以秒为单位转换为以毫秒为单位的时间戳
if(timestamp < 10000000000) {
timestamp = timestamp * 1000L;
}
不幸的是,我必须把这个代码放在每分钟接收数千个请求的服务器上。所以,我想尽可能快地进行比较。
我有几个问题:
- 有多贵幼稚的做法?
- 有没有更快的方式来处理呢?
我想将时间戳以秒为单位转换为以毫秒为单位的时间戳。以下是我的天真做法。java将时间戳以秒为单位转换为以毫秒为单位的时间戳
if(timestamp < 10000000000) {
timestamp = timestamp * 1000L;
}
不幸的是,我必须把这个代码放在每分钟接收数千个请求的服务器上。所以,我想尽可能快地进行比较。
我有几个问题:
天真的方法有多贵?
条件大约需要1ns,而* 1000L
大约需要3ns。所以总共大约4ns。 如果你每秒钟做2.5亿次,那么你有问题。几千秒,我不会担心。
有没有更快的方式来处理?
我相信这是您在性能方面出现的问题。我会用一个CPU来测量你的问题而不是猜测。
我不同意你的数字......在我的旧Core i5上乘法的延迟是3个周期,这意味着大约1纳秒(同时仍然为ILP留出空间)。如果可以预测的话,条件几乎是免费的,否则它可能花费几个周期(Core i7上的17个周期,正如书面[这里])(http://www.programcreek.com/2012/12/amd-versus-intel-成功和他们的处理器架构陷阱2推土机和砂桥比较),即大约5纳秒。我同意你的结论。 – maaartinus
当然。我会在我的代码中的适当位置放置一些秒表,并检查这会对每个请求花费多少时间。我想我应该做到这一点。我将在我的实验完成后发表评论。在此之前,我只会关闭这个问题。 – riship89
@ riship89时间戳最多需要约35ns(约9倍的代码),因此测量它非常困难。 –
您是否确定这实际上是相对于其他应用程序功能而言的性能瓶颈? –
带有乘法和存储的'if'?我希望这是廉价和非常快。你有没有测量任何性能问题? –
所有服务器都是获取请求并存储请求数据。我们相信我们的客户不会发送犯规数据。所以,目前,绝对没有数据处理正在进行。这是我们第一次在服务器中处理数据。 – riship89