java - 在什么情况下 CLOCK_MONOTONIC 可能不可用
问题描述
在Linux上JavaSystem.nanoTime()
的单调实现依赖于操作系统上可用的事实。如果它不可用,则在使用. 例如,以下测试可能会失败。CLOCK_MONOTONIC
gettimeofday
nanoTime
long t1 = System.nanoTime();
long t2 = System.nanoTime();
assert t2 >= t1
在什么情况下CLOCK_MONOTONIC
可能在服务器上不可用?假设CLOCK_MONOTONIC
所有现代 Linux 服务器上都可以使用时钟是否合理?
解决方案
假设所有现代 Linux 服务器上都可以使用 CLOCK_MONOTONIC 时钟是否合理?
是的。假设是合理的。
从 gettime 手册条目的措辞中,我们可以推断出真正的旧版本 glibc 不支持CLOCK_MONOTONIC
. (我仍在试图弄清楚有多老......但可能是当 glibc 声称符合 POSIX 1003.1 时。)
CLOCK_MONOTONIC
(至少)在 IEEE Std 1003.1, 2004 Edition 中指定,尽管兼容的 libc 实现仍有可能不支持CLOCK_MONOTONIC
.
CLOCK_MONOTONIC
Linux 内核源代码至少从 Linux 3.0 (2011)开始就支持时钟。
从其他来源来看,它还取决于您系统的 glibc 是如何构建的。(当使用“模拟计时器”构建时,CLOCK_MONOTONIC
不支持。)
以下是一些不支持的情况:
一些旧的 CPU 芯片可能会出现问题;例如https://bugzilla.redhat.com/show_bug.cgi?id=1499480
Cygwin 的某些(全部?)版本不支持它。
ARM 上的某些(全部?)版本的 uCLibc 不支持它。
也有可能CLOCK_MONOTONIC
得到支持但有问题:
推荐阅读
- python - 嵌入层后的 LSTM - 值错误:不是符号张量吗?
- php - 如何使用 Htaccess 从 .html/ 重定向到 .html?
- android - 如何相对于屏幕定位视图(即不是父 ViewGroup)?
- html - 背景附件:固定,在 Chrome 版本之间移动位置
- java - 在指定位置放置文本(数字)
- airflow - 在长时间运行的作业期间重新启动时,气流调度程序最终卡住
- c# - 将数据表转换为列表
- vbscript - 无法在 ASP Classic 中设置命令对象属性
- java - 具有 DatatypeFactory 的神奇 00:09 时区
- google-sheets - Google 电子表格 - 使用选项卡名称作为公式中的参考