修正單調鐘的誤譯

This commit is contained in:
Abby 2021-01-13 14:02:43 +09:00 committed by abby
parent 42002faaeb
commit 02c84af20e
2 changed files with 8 additions and 8 deletions

View File

@ -27,7 +27,7 @@
在批處理領域,作業的輸入和輸出是檔案(也許在分散式檔案系統上)。流處理領域中的等價物看上去是什麼樣子的? 在批處理領域,作業的輸入和輸出是檔案(也許在分散式檔案系統上)。流處理領域中的等價物看上去是什麼樣子的?
當輸入是一個檔案(一個位元組序列),第一個處理步驟通常是將其解析為一系列記錄。在流處理的上下文中,記錄通常被叫做 **事件event** ,但它本質上是一樣的:一個小的,自包含的,不可變的物件,包含某個時間點發生的某件事情的細節。一個事件通常包含一個來自時鐘的時間戳,以指明事件發生的時間(參見“[單調鍾與時鐘](ch8.md#單調鍾與時鐘)”)。 當輸入是一個檔案(一個位元組序列),第一個處理步驟通常是將其解析為一系列記錄。在流處理的上下文中,記錄通常被叫做 **事件event** ,但它本質上是一樣的:一個小的,自包含的,不可變的物件,包含某個時間點發生的某件事情的細節。一個事件通常包含一個來自時鐘的時間戳,以指明事件發生的時間(參見“[單調鐘與時鐘](ch8.md#單調鐘與時鐘)”)。
例如發生的事件可能是使用者採取的行動例如檢視頁面或進行購買。它也可能來源於機器例如對溫度感測器或CPU利用率的週期性測量。在“[使用Unix工具進行批處理](ch10.md#使用Unix工具進行批處理)”的示例中Web伺服器日誌的每一行都是一個事件。 例如發生的事件可能是使用者採取的行動例如檢視頁面或進行購買。它也可能來源於機器例如對溫度感測器或CPU利用率的週期性測量。在“[使用Unix工具進行批處理](ch10.md#使用Unix工具進行批處理)”的示例中Web伺服器日誌的每一行都是一個事件。

View File

@ -261,9 +261,9 @@
而且,網路上的每臺機器都有自己的時鐘,這是一個實際的硬體裝置:通常是石英晶體振盪器。這些裝置不是完全準確的,所以每臺機器都有自己的時間概念,可能比其他機器稍快或更慢。可以在一定程度上同步時鐘:最常用的機制是**網路時間協議NTP**它允許根據一組伺服器報告的時間來調整計算機時鐘【37】。伺服器則從更精確的時間源如GPS接收機獲取時間。 而且,網路上的每臺機器都有自己的時鐘,這是一個實際的硬體裝置:通常是石英晶體振盪器。這些裝置不是完全準確的,所以每臺機器都有自己的時間概念,可能比其他機器稍快或更慢。可以在一定程度上同步時鐘:最常用的機制是**網路時間協議NTP**它允許根據一組伺服器報告的時間來調整計算機時鐘【37】。伺服器則從更精確的時間源如GPS接收機獲取時間。
### 單調與時鐘 ### 單調與時鐘
現代計算機至少有兩種不同的時鐘:時鐘和單調。儘管它們都衡量時間,但區分這兩者很重要,因為它們有不同的目的。 現代計算機至少有兩種不同的時鐘:時鐘和單調。儘管它們都衡量時間,但區分這兩者很重要,因為它們有不同的目的。
#### 時鐘 #### 時鐘
@ -275,17 +275,17 @@
時鐘還具有相當粗略的解析度例如在較早的Windows系統上以10毫秒為單位前進【39】。在最近的系統中這已經不是一個問題了。 時鐘還具有相當粗略的解析度例如在較早的Windows系統上以10毫秒為單位前進【39】。在最近的系統中這已經不是一個問題了。
#### 單調 #### 單調
單調適用於測量持續時間時間間隔例如超時或服務的響應時間Linux上的`clock_gettime(CLOCK_MONOTONIC)`和Java中的`System.nanoTime()`都是單調時鐘。這個名字來源於他們保證總是前進的事實(而時鐘可以及時跳回)。 單調適用於測量持續時間時間間隔例如超時或服務的響應時間Linux上的`clock_gettime(CLOCK_MONOTONIC)`和Java中的`System.nanoTime()`都是單調時鐘。這個名字來源於他們保證總是前進的事實(而時鐘可以及時跳回)。
你可以在某個時間點檢查單調鐘的值,做一些事情,且稍後再次檢查它。這兩個值之間的差異告訴你兩次檢查之間經過了多長時間。但單調鐘的絕對值是毫無意義的:它可能是計算機啟動以來的納秒數,或類似的任意值。特別是比較來自兩臺不同計算機的單調鐘的值是沒有意義的,因為它們並不是一回事。 你可以在某個時間點檢查單調鐘的值,做一些事情,且稍後再次檢查它。這兩個值之間的差異告訴你兩次檢查之間經過了多長時間。但單調鐘的絕對值是毫無意義的:它可能是計算機啟動以來的納秒數,或類似的任意值。特別是比較來自兩臺不同計算機的單調鐘的值是沒有意義的,因為它們並不是一回事。
在具有多個CPU插槽的伺服器上每個CPU可能有一個單獨的計時器但不一定與其他CPU同步。作業系統會補償所有的差異並嘗試嚮應用執行緒表現出單調鐘的樣子即使這些執行緒被排程到不同的CPU上。當然明智的做法是不要太把這種單調性保證當回事【40】。 在具有多個CPU插槽的伺服器上每個CPU可能有一個單獨的計時器但不一定與其他CPU同步。作業系統會補償所有的差異並嘗試嚮應用執行緒表現出單調鐘的樣子即使這些執行緒被排程到不同的CPU上。當然明智的做法是不要太把這種單調性保證當回事【40】。
如果NTP協議檢測到計算機的本地石英鐘比NTP伺服器要更快或更慢則可以調整單調向前走的頻率(這稱為**偏移skewing**時鐘。預設情況下NTP允許時鐘速率增加或減慢最高至0.05但NTP不能使單調時鐘向前或向後跳轉。單調時鐘的解析度通常相當好在大多數系統中它們能在幾微秒或更短的時間內測量時間間隔。 如果NTP協議檢測到計算機的本地石英鐘比NTP伺服器要更快或更慢則可以調整單調向前走的頻率(這稱為**偏移skewing**時鐘。預設情況下NTP允許時鐘速率增加或減慢最高至0.05但NTP不能使單調時鐘向前或向後跳轉。單調時鐘的解析度通常相當好在大多數系統中它們能在幾微秒或更短的時間內測量時間間隔。
在分散式系統中,使用單調測量**經過時間elapsed time**(比如超時)通常很好,因為它不假定不同節點的時鐘之間存在任何同步,並且對測量的輕微不準確性不敏感。 在分散式系統中,使用單調測量**經過時間elapsed time**(比如超時)通常很好,因為它不假定不同節點的時鐘之間存在任何同步,並且對測量的輕微不準確性不敏感。
### 時鐘同步與準確性 ### 時鐘同步與準確性
@ -339,7 +339,7 @@
NTP同步是否能足夠準確以至於這種不正確的排序不會發生也許不能因為NTP的同步精度本身受到網路往返時間的限制除了石英鐘漂移這類誤差源之外。為了進行正確的排序你需要一個比測量物件即網路延遲要精確得多的時鐘。 NTP同步是否能足夠準確以至於這種不正確的排序不會發生也許不能因為NTP的同步精度本身受到網路往返時間的限制除了石英鐘漂移這類誤差源之外。為了進行正確的排序你需要一個比測量物件即網路延遲要精確得多的時鐘。
所謂的**邏輯時鐘logic clock**【56,57】是基於遞增計數器而不是振盪石英晶體對於排序事件來說是更安全的選擇請參見“[檢測併發寫入](ch5.md#檢測併發寫入)”)。邏輯時鐘不測量一天中的時間或經過的秒數,而僅測量事件的相對順序(無論一個事件發生在另一個事件之前還是之後)。相反,用來測量實際經過時間的**時鐘**和**單調**也被稱為**物理時鐘physical clock**。我們將在“[順序保證](#順序保證)”中來看順序問題。 所謂的**邏輯時鐘logic clock**【56,57】是基於遞增計數器而不是振盪石英晶體對於排序事件來說是更安全的選擇請參見“[檢測併發寫入](ch5.md#檢測併發寫入)”)。邏輯時鐘不測量一天中的時間或經過的秒數,而僅測量事件的相對順序(無論一個事件發生在另一個事件之前還是之後)。相反,用來測量實際經過時間的**時鐘**和**單調**也被稱為**物理時鐘physical clock**。我們將在“[順序保證](#順序保證)”中來看順序問題。
#### 時鐘讀數存在置信區間 #### 時鐘讀數存在置信區間