当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Elixir System用法及代码示例


Elixir语言中 System 相关用法介绍如下。

System 模块提供直接与 VM 或主机系统交互的函数。

时间

System 模块还提供与时间一起工作的函数,返回系统保存的不同时间,支持不同的时间单位。

依赖系统时间的复杂性之一是它们可能会被调整。例如,当您进入和离开夏令时时,系统时钟会进行调整,通常会增加或删除一小时。我们称这种变化为"time warps"。为了了解此类更改可能是如何有害的,请想象以下代码:

## DO NOT DO THIS
prev = System.os_time()
# ... execute some code ...
next = System.os_time()
diff = next - prev

如果在代码执行过程中系统时钟发生变化,一些在 1 秒内执行的代码可能会被报告为占用 1 小时以上!为了解决这些问题,VM 通过 System.monotonic_time/0 提供了一个单调的时间,它不会减少也不会跳跃:

## DO THIS
prev = System.monotonic_time()
# ... execute some code ...
next = System.monotonic_time()
diff = next - prev

一般来说,VM 提供三种时间测量:

  • os_time/0 - 操作系统 (OS) 报告的时间。该时间可以无限制地向前或向后调整;

  • system_time/0 - os_time/0 的 VM 视图。在时间扭曲的情况下,系统时间和操作系统时间可能不匹配,尽管 VM 致力于对齐它们。这个时间不是单调的(即它可能会减少),因为它的行为被配置为 by the VM time warp mode

  • monotonic_time/0 - Erlang VM 提供的单调递增时间。

此模块中的时间函数在 :native 单元中工作(除非另有说明),这取决于操作系统。大多数情况下,所有计算都在 :native 单位中完成,以避免精度损失,最后调用 convert_time_unit/3 以转换为特定时间单位,如 :millisecond:microsecond 。有关详细信息,请参阅 time_unit/0 类型。

有关不同时间 VM 支持的更完整概要,请参阅 Erlang 文档中的 chapter on time and time correction

相关用法


注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 System。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。