From 02c84af20e27350d0a22906ff9bba9479873a1b0 Mon Sep 17 00:00:00 2001 From: Abby Date: Wed, 13 Jan 2021 14:02:43 +0900 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=96=AE=E8=AA=BF=E9=90=98?= =?UTF-8?q?=E7=9A=84=E8=AA=A4=E8=AD=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zh-tw/ch11.md | 2 +- zh-tw/ch8.md | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/zh-tw/ch11.md b/zh-tw/ch11.md index c52325b..916368f 100644 --- a/zh-tw/ch11.md +++ b/zh-tw/ch11.md @@ -27,7 +27,7 @@ ​ 在批處理領域,作業的輸入和輸出是檔案(也許在分散式檔案系統上)。流處理領域中的等價物看上去是什麼樣子的? -​ 當輸入是一個檔案(一個位元組序列),第一個處理步驟通常是將其解析為一系列記錄。在流處理的上下文中,記錄通常被叫做 **事件(event)** ,但它本質上是一樣的:一個小的,自包含的,不可變的物件,包含某個時間點發生的某件事情的細節。一個事件通常包含一個來自時鐘的時間戳,以指明事件發生的時間(參見“[單調鍾與時鐘](ch8.md#單調鍾與時鐘)”)。 +​ 當輸入是一個檔案(一個位元組序列),第一個處理步驟通常是將其解析為一系列記錄。在流處理的上下文中,記錄通常被叫做 **事件(event)** ,但它本質上是一樣的:一個小的,自包含的,不可變的物件,包含某個時間點發生的某件事情的細節。一個事件通常包含一個來自時鐘的時間戳,以指明事件發生的時間(參見“[單調鐘與時鐘](ch8.md#單調鐘與時鐘)”)。 ​ 例如,發生的事件可能是使用者採取的行動,例如檢視頁面或進行購買。它也可能來源於機器,例如對溫度感測器或CPU利用率的週期性測量。在“[使用Unix工具進行批處理](ch10.md#使用Unix工具進行批處理)”的示例中,Web伺服器日誌的每一行都是一個事件。 diff --git a/zh-tw/ch8.md b/zh-tw/ch8.md index 6bb6324..847ff99 100644 --- a/zh-tw/ch8.md +++ b/zh-tw/ch8.md @@ -261,9 +261,9 @@ ​ 而且,網路上的每臺機器都有自己的時鐘,這是一個實際的硬體裝置:通常是石英晶體振盪器。這些裝置不是完全準確的,所以每臺機器都有自己的時間概念,可能比其他機器稍快或更慢。可以在一定程度上同步時鐘:最常用的機制是**網路時間協議(NTP)**,它允許根據一組伺服器報告的時間來調整計算機時鐘【37】。伺服器則從更精確的時間源(如GPS接收機)獲取時間。 -### 單調鍾與時鐘 +### 單調鐘與時鐘 -​ 現代計算機至少有兩種不同的時鐘:時鐘和單調鍾。儘管它們都衡量時間,但區分這兩者很重要,因為它們有不同的目的。 +​ 現代計算機至少有兩種不同的時鐘:時鐘和單調鐘。儘管它們都衡量時間,但區分這兩者很重要,因為它們有不同的目的。 #### 時鐘 @@ -275,17 +275,17 @@ ​ 時鐘還具有相當粗略的解析度,例如,在較早的Windows系統上以10毫秒為單位前進【39】。在最近的系統中這已經不是一個問題了。 -#### 單調鍾 +#### 單調鐘 -​ 單調鍾適用於測量持續時間(時間間隔),例如超時或服務的響應時間:Linux上的`clock_gettime(CLOCK_MONOTONIC)`,和Java中的`System.nanoTime()`都是單調時鐘。這個名字來源於他們保證總是前進的事實(而時鐘可以及時跳回)。 +​ 單調鐘適用於測量持續時間(時間間隔),例如超時或服務的響應時間:Linux上的`clock_gettime(CLOCK_MONOTONIC)`,和Java中的`System.nanoTime()`都是單調時鐘。這個名字來源於他們保證總是前進的事實(而時鐘可以及時跳回)。 ​ 你可以在某個時間點檢查單調鐘的值,做一些事情,且稍後再次檢查它。這兩個值之間的差異告訴你兩次檢查之間經過了多長時間。但單調鐘的絕對值是毫無意義的:它可能是計算機啟動以來的納秒數,或類似的任意值。特別是比較來自兩臺不同計算機的單調鐘的值是沒有意義的,因為它們並不是一回事。 ​ 在具有多個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的同步精度本身受到網路往返時間的限制,除了石英鐘漂移這類誤差源之外。為了進行正確的排序,你需要一個比測量物件(即網路延遲)要精確得多的時鐘。 -​ 所謂的**邏輯時鐘(logic clock)**【56,57】是基於遞增計數器而不是振盪石英晶體,對於排序事件來說是更安全的選擇(請參見“[檢測併發寫入](ch5.md#檢測併發寫入)”)。邏輯時鐘不測量一天中的時間或經過的秒數,而僅測量事件的相對順序(無論一個事件發生在另一個事件之前還是之後)。相反,用來測量實際經過時間的**時鐘**和**單調鍾**也被稱為**物理時鐘(physical clock)**。我們將在“[順序保證](#順序保證)”中來看順序問題。 +​ 所謂的**邏輯時鐘(logic clock)**【56,57】是基於遞增計數器而不是振盪石英晶體,對於排序事件來說是更安全的選擇(請參見“[檢測併發寫入](ch5.md#檢測併發寫入)”)。邏輯時鐘不測量一天中的時間或經過的秒數,而僅測量事件的相對順序(無論一個事件發生在另一個事件之前還是之後)。相反,用來測量實際經過時間的**時鐘**和**單調鐘**也被稱為**物理時鐘(physical clock)**。我們將在“[順序保證](#順序保證)”中來看順序問題。 #### 時鐘讀數存在置信區間