當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。