精华内容
下载资源
问答
  • System.nanoTime()的使用
    2018-10-15 12:19:23

    纳秒 ns(nanosecond):纳秒, 时间单位。一秒的10亿分之一,即等于10的负9次方秒。常用作 内存读写速度的单位。
      1纳秒=0.000001 毫秒
      1纳秒=0.00000 0001秒

    java的System.currentTimeMillis()和System.nanoTime()区别:

    java中System.nanoTime()返回的是纳秒,nanoTime而返回的可能是任意时间,甚至可能是负数……
    java中System.currentTimeMillis()返回的毫秒,这个毫秒其实就是自1970年1月1日0时起的毫秒数.

    两个方法都不能保证完全精确,精确程度依赖具体的环境.

    更多相关内容
  • 在Java世界中,对System.nanoTime()的理解非常好。 总有一些人说它是快速,可靠的,并且在可能的情况下,应该使用它代替System.currentTimemillis()进行计时。 总的来说,他绝对是在撒谎,一点也不差,但是开发...
    在Java世界中,对System.nanoTime()的理解非常好。 总有一些人说它是快速,可靠的,并且在可能的情况下,应该使用它代替System.currentTimemillis()进行计时。 总的来说,他绝对是在撒谎,一点也不差,但是开发人员应该意识到一些缺点。 同样,尽管它们有很多共同点,但是这些缺点通常是特定于平台的。

    视窗

    使用QueryPerformanceCounter API实现功能,众所周知该API存在一些问题。 它可能会飞速发展 ,有人报告说在多处理器计算机上的速度可能非常慢 ,等等。我花了一些时间上网尝试查找QueryPerformanceCounter的工作原理和作用。 关于该主题尚无明确结论,但是有一些帖子可以简要介绍其工作原理。 我会说,最有用的,大概是人。 当然,只要稍作搜索,就能找到更多,但信息大致相同。

    因此,如果可用,则实现似乎正在使用HPET 。 如果不是,则它将TSC与CPU之间的值进行某种形式的同步。 有趣的是, QueryPerformanceCounter承诺返回的值将以恒定的频率增加。 这意味着,在使用TSC和多个CPU的情况下,可能不仅会遇到一些困难,不仅因为CPU可能具有不同的TSC值,而且可能具有不同的频率。 请牢记所有注意事项Microsoft 建议使用SetThreadAffinityMask来阻塞将QueryPerformanceCounter调用到单个处理器的线程,这显然不会在JVM中发生。

    LINUX

    Linux与Windows非常相似,除了它更加透明(我设法下载了源代码:))。 该值从带有CLOCK_MONOTONIC标志的clock_gettime中读取(对于真正的男人,源可从Linux源的vclock_gettime.c中获得)。 使用TSCHPET 。 与Windows的唯一区别是Linux甚至不尝试同步从不同CPU读取的TSC值,而是按原样返回它。 这意味着该值可以在读取时依赖于CPU的依赖关系上来回跳。 另外,与Windows签约时,Linux不会保持更改频率恒定。 另一方面,它绝对应该提高性能。

    索拉里斯

    Solaris很简单。 我相信通过gethrtime可以实现与linux差不多相同的clock_gettime实现。 区别在于Solaris保证计数器不会跳回,这在Linux上是可能的,但是有可能返回相同的值。 从源代码可以看出,这种保证是使用CAS实现的,它需要与主存储器同步,并且在多处理器机器上可能相对昂贵。 与Linux相同,更改率可能有所不同。

    结论

    结论是多云之王。 开发人员必须意识到功能不是完美的,它可以向后或向前跳跃。 它可能不会单调变化,并且变化率会随CPU时钟速度的变化而变化。 而且,它并没有许多人想象的那么快。 在我的Windows 7计算机上进行单线程测试时,它仅比System.currentTimeMillis()快约10%,而在多线程测试中,线程数与CPU数相同,只是相同。 因此,总的来说,它所提供的只是分辨率的提高,这在某些情况下可能很重要。 最后要注意的是,即使CPU频率没有变化,也不要认为您可以将该值可靠地映射到系统时钟,请参见此处的详细信息。

    附录

    附录包含针对不同操作系统的功能实现。 源代码来自OpenJDK v.7。

    的Solaris

    // gethrtime can move backwards if read from one cpu and then a different cpu
    // getTimeNanos is guaranteed to not move backward on Solaris
    inline hrtime_t getTimeNanos() {
      if (VM_Version::supports_cx8()) {
        const hrtime_t now = gethrtime();
        // Use atomic long load since 32-bit x86 uses 2 registers to keep long.
        const hrtime_t prev = Atomic::load((volatile jlong*)&max_hrtime);
        if (now <= prev)  return prev;   // same or retrograde time;
        const hrtime_t obsv = Atomic::cmpxchg(now, (volatile jlong*)&max_hrtime, prev);
        assert(obsv >= prev, "invariant");   // Monotonicity
        // If the CAS succeeded then we're done and return "now".
        // If the CAS failed and the observed value "obs" is >= now then
        // we should return "obs".  If the CAS failed and now > obs > prv then
        // some other thread raced this thread and installed a new value, in which case
        // we could either (a) retry the entire operation, (b) retry trying to install now
        // or (c) just return obs.  We use (c).   No loop is required although in some cases
        // we might discard a higher "now" value in deference to a slightly lower but freshly
        // installed obs value.   That's entirely benign -- it admits no new orderings compared
        // to (a) or (b) -- and greatly reduces coherence traffic.
        // We might also condition (c) on the magnitude of the delta between obs and now.
        // Avoiding excessive CAS operations to hot RW locations is critical.
        // See http://blogs.sun.com/dave/entry/cas_and_cache_trivia_invalidate
        return (prev == obsv) ? now : obsv ;
      } else {
        return oldgetTimeNanos();
      }
    }

    的Linux

    jlong os::javaTimeNanos() {
      if (Linux::supports_monotonic_clock()) {
        struct timespec tp;
        int status = Linux::clock_gettime(CLOCK_MONOTONIC, &tp);
        assert(status == 0, "gettime error");
        jlong result = jlong(tp.tv_sec) * (1000 * 1000 * 1000) + jlong(tp.tv_nsec);
        return result;
      } else {
        timeval time;
        int status = gettimeofday(&time, NULL);
        assert(status != -1, "linux error");
        jlong usecs = jlong(time.tv_sec) * (1000 * 1000) + jlong(time.tv_usec);
        return 1000 * usecs;
      }
    }

    视窗

    jlong os::javaTimeNanos() {
      if (!has_performance_count) {
        return javaTimeMillis() * NANOS_PER_MILLISEC; // the best we can do.
      } else {
        LARGE_INTEGER current_count;
        QueryPerformanceCounter(¤t_count);
        double current = as_long(current_count);
        double freq = performance_frequency;
        jlong time = (jlong)((current/freq) * NANOS_PER_SEC);
        return time;
      }
    }

    参考:


    翻译自: https://www.javacodegeeks.com/2012/02/what-is-behind-systemnanotime.html

    展开全文
  • python作业6

    2022-01-16 21:40:56
    long startTime=System.nanoTime(); for(int i=1;i;i++) { temp=temp10+num; sum+=temp; if (i==num) {undefined System.out.print(temp); } else {undefined System.out.print(temp+"+"); } } System.out.println...

    作业11.

    给定一个10个元素的列表,请完成排序(注意,不要使用系统api)
    lt=[1,5,4,100,-21,6,0,120,520,1314]
    for i in range(len(lt) - 1):
    for j in range(len(lt) - 1 - i):
    if lt[j] > lt[j + 1]:
    lt[j], lt[j + 1] = lt[j + 1], lt[j]
    print(lt)
    在这里插入图片描述

    作业12.

    ***求 a+aa+aaa+…+aaaaaaaaa=?其中a为1至9之中的一个数,项数也要可以指定。
    import java.util.Scanner;

    public class Practice06 {undefined
    /*

    • 求a+aa+aaa+…+aaaaaaaaa=?
      *其中a为1至9之中的一个数,项数也要可以指定。
      *5+55+555+5555+55555
      /
      public static void main(String[] args) {
      Scanner scanner = new Scanner(System.in);
      System.out.println(“请输入一个1~9的a值:”);
      int num = scanner.nextInt();
      scanner.close();
      int sum=0;
      int temp=0;
      long startTime=System.nanoTime();
      for(int i=1;i<=num;i++) {
      temp=temp10+num;
      sum+=temp;
      if (i==num) {undefined
      System.out.print(temp);
      }
      else {undefined
      System.out.print(temp+"+");
      }
      }
      System.out.println("="+sum);
      long endTime=System.nanoTime();
      System.out.println(“程序运行的时间:”+(endTime-startTime)/1000+“us”);
      }

    作业13.

    合并两个有序数组,合并后还是有序列表

     public static int[] twoArray(int[] a, int[] b) {
    	int i =0;
    	int j = 0;
    	int k = 0;
    	int aLen = a.length;
    	int bLen = b.length;
    	int[] arra = new int[aLen + bLen];
    	while (i < aLen && j < bLen) {
    		if (a[i] < b[j]) {
    			arra[k] = a[i];
    			i++;
    			
    		}  else {
    			arra[k] = b[j];
    			j++;
    		}
    		k++;	
    	}
    	
    	if (i == aLen) {
    		while(j < bLen) {
    			arra[k] = b[j];
    			k++;
    			j++;
    		}
    	}
    	
    	if (j == bLen) {
    		while(i < aLen) {
    			arra[k] = a[i];
    			k++;
    			i++;
    		}
    	}
    	for(int m = 0; m < arra.length; m++) {
    		System.out.print(arra[m] + ",");
    	}
    	
    	return arra;
    }
    
    public static void main(String[] args) {
    	int[] a = {1,2,6,9};
    	int[] b = {5,7,8,9,10};
    	twoArray(a, b);
    }
    

    作业14.

    给定一个非负整数数组A,将该数组中的所有偶数都放在奇数元素之前
    1.给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。

    你可以返回满足此条件的任何数组作为答案。

    示例:

    输入:[3,1,2,4]
    输出:[2,4,3,1]
    输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。

    提示:

    1 <= A.length <= 5000
    0 <= A[i] <= 5000
    2.代码展示

    /**

    • Note: The returned array must be malloced, assume caller calls free().
      /
      int
      sortArrayByParity(int* A, int ASize, int* returnSize)
      {
      *returnSize=ASize;
      for (int i = 0; i < ASize; i++)
      {
      int flag = 0;
      for (int j = 1; j <= ASize - i - 1; j++)
      {
      if (A[j - 1] %2 == 1)
      {
      flag = 1;
      int tmp = A[j - 1];
      A[j - 1] = A[j];
      A[j] = tmp;
      }
      }
      if (flag == 0)
      {
      break;
      }
      }
      return A;
      }

    作业15

    :将10进制数据转换为二进制,并且统计其中的0和1的数量

    作业16

    :给定一个数组,已知数组中的元素都是成对出现,
    现在数组中只有一个元素没有成对,请找出这个元素。
    [1,3,1,2,2,8,8]

    展开全文
  • 有没有一种简单的方法/模块可以 正确测量python中的经过时间?我知道我可以简单地打电话time.time()两次并取差额,但是如果更改系统时间,那将产生错误的结果。当然,这种情况很少发生,但这确实表明我在衡量错误的...

    有没有一种简单的方法/模块可以 正确

    测量python中的经过时间?我知道我可以简单地打电话time.time()两次并取差额,但是如果更改系统时间,那将产生错误的结果。当然,这种情况很少发生,但这确实表明我在衡量错误的事情。

    考虑time.time()到持续时间时,使用它来衡量是难以置信的。您将两个绝对时间测量值的差值反过来由持续时间测量值(由计时器执行)和已知的绝对时间(手动设置或通过ntp设置)构成,而您根本不感兴趣。

    因此,有没有一种方法可以直接查询此“计时器时间”?我以为它可以表示为没有有意义的绝对表示的毫秒或微秒值(因此不需要随系统时间进行调整)。环顾四周,似乎这System.nanoTime()确实是Java的功能,但是我没有找到相应的Python函数,即使它(从硬件技术上)比提供起来更容易time.time()。

    编辑:为避免混淆并解决以下问题的答案:这与DST更改无关,并且我也不需要CPU时间-

    我希望经过的物理时间。它不需要非常细粒度,甚至不需要特别准确。它只是不应该给我负面的持续时间,或者不给我持续数个数量级(超过粒度)的持续时间,只是因为有人决定将系统时钟设置为其他值。这是Python文档对“

    time.time()”的评价:

    我正是要避免这种情况,因为它可能导致时间计算中出现诸如负值之类的奇怪现象。目前,我可以解决此问题,但我相信,在可行的情况下,学习使用适当的解决方案是一个好主意,因为有一天纠缠会再次困扰您。

    Edit2:一些研究表明,您可以使用GetTickCount64()在Windows中获得与我希望的系统时间无关的度量,而在Linux下,您可以在times()的返回值中获得它。但是,我仍然找不到在Python中提供此功能的模块。

    展开全文
  • DolphinDB使用案例12:Python API接口

    千次阅读 2019-11-01 10:39:56
    DolphinDB与Python DolphinDB可以在Python中调用,大大降低了时序数据库的使用门槛。 DolphinDB Python API实质是封装了DolphinDB的脚本语言1(也就是前面11次案例中使用到的语言)。Python代码被转换成DolphinDB...
  • 平时产生随机数时我们经常拿时间做种子,比如用System.currentTimeMillis的结果,但是在...后来看到java中产生随机数函数以及线程池中的一些函数使用的都是System.nanoTime,下面说一下这2个方法的具体区别。    
  • 今天花了一些时间,过了一下这几年自己用Python开发的自动化测试框架,然后将其中常用到Python库抽出来,简单整理了一下它们的用处。我觉得,只要掌握了这些常用的Python库,足以应对大多数自动化测试框架和工具的...
  • public class Test { private static void timeIt(Runnable block) { long start = System.nanoTime(); try { block.run(); } finally { long end = System.nanoTime(); System.out.println("Time taken(s): " + ...
  • 我知道用C或C ++编写可以提供更好的解决方案,但我也对这种情况下python的可用性感到好奇。在Java由于速度慢和内存限制而无法有效运行的情况下使用Python是否合理-请不要说增加堆大小或这样的情况? 参考方案 如果...
  • [Python]不使用kociemba库解魔方前言思路测试效果部分代码主程序:Python3.8关键改动:Java 14.0.1项目文件 前言 说到魔方,python有个现成的库kociemba,但是由于版本限制严重+需要vc2015环境,最后折腾半天还是...
  • Python实践1-Python自动化测试常用库整理

    千次阅读 多人点赞 2018-10-04 22:25:06
    今天花了一些时间,过了一下这几年自己用Python开发的自动化测试框架,然后将其中常用到Python库抽出来,简单整理了一下它们的用处。我觉得,只要掌握了这些常用的Python库,足以应对大多数自动化测试框架和工具的...
  • 基本库:sys 程序和Python解析器的交互os 启动新进程;操作文件和目录re 正则表达式,字符串匹配string 基本字符串操作inspect 提供自省和反射功能importlib 支持动态导入bitstring二进制数据处理zipfile 压缩解压...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 软件测试Python常用库

    千次阅读 2019-10-09 20:53:53
    sys 程序和Python解析器的交互 os 启动新进程;操作文件和目录 re 正则表达式,字符串匹配 string 基本字符串操作 inspect 提供自省和反射功能 importlib 支持动态导入 bitstring二进制数据处理 zipfile 压缩...
  • Python 验证哥德巴赫猜想(日期: 2020年7月4日)制作背景大一下学期疫情时代,学习了Python基础和java基础以及一点点算法。在制作过程中发现了Python速度远远低于java运行速度,因而发现了提升程序效率的一种方法,...
  • 我之所以选择C语言而不是其他语言,是因为人们普遍认为C代码比其他流行的编程语言(例如Java和Python)运行得更快。 但是,即使我一直对C的速度(或C实际上最快)感到好奇,我自己也没有做任何实验来证实这一说法。 ...
  • Python 没有 JIT。 Java 有。 C++这种语言是 AOT 直接编译成机器码,同样效果的代码执行,C++应该比Java快,因为Java 默认是 JIT,也可以用Java 9之后的AOT特性,预编译机器码。这里为何Python慢?Python 的运行过程...
  • Python和C,Java之间的性能比较

    千次阅读 2020-07-28 22:08:59
    本文是用所有三种语言运行矩阵乘法时发生的情况,由于人们普遍认为C代码比其他流行的编程语言(例如Java和Python)运行得更快,但一直对C的速度(或C实际上最快)感到好奇,因此对C语言做了大量的实现工作,决定进行一些...
  • i++ { if arr[i] > arr[i+1] { arr[i], arr[i+1] = arr[i+1], arr[i] } } } } 运行时间显示 cpp java python go 结论 显然,代码运行时间 c++ < go < java < python c++ 在 0.01ms数量级上 go 在1ms...
  • 基本库:sys 程序和Python解析器的交互os 启动新进程;操作文件和目录re 正则表达式,字符串匹配string 基本字符串操作inspect 提供自省和反射功能importlib 支持动态导入bitstring二进制数据处理zipfile 压缩解压...
  • predict 以上均在CentOS7虚拟机上进行,所用详细命令暂不给出 4、docker命令 // 查看正在运行的容器 docker ps // 停止容器 docker stop 容器ID // 查看当前容器状态 service docker status 三、Python客户端 1、...
  • /bin/env python def test1(): n=0 for i in range(101): n+=i return n def test2(): return sum(range(101)) def test3(): return sum(x for x in range(101)) if __name__=='__main__': from timeit import Timer...
  • Scala计算代码运行时长 val t = System.nanoTime ...Python计算代码时长 import datetime #开始时间 starttime = datetime.datetime.now() 代码段 endtime = datetime.datetime.now()#结束时间 print

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,342
精华内容 536
关键字:

python nanotime是什么

友情链接: GUIforWeekdayPredictor.rar