2017-09-21 3 views
0

나는 Lamport timestamps으로 뭔가를 오해하고 있다고 생각합니다. 메시지는 분산 된 엔드 포인트간에 이동하는 데 동일한 시간이 걸릴 것으로 예상됩니다.가변 메시지 여행 시간이 포함 된 Lamport 타임 스탬프

p1 프로세스는 메시지 m1m2을 순차적으로 처리하여 p2으로 보냅니다. 기사의 알고리즘 섹션의 의사에 따라, 우리는이 : m1 모든 것이 괜찮 p2m2 전에 도달

# we start at 0 
time(p1) = 0 

# we send m1 
time(p1) = time(p1) + 1 = 1 
send(m1, 1) 

# we send m2 
time(p1) = time(p1) + 1 = 2 
send(m2, 2) 

합니다. m2가 먼저한다면, 우리가 얻을 : p2의 현지 시간에 따라서

# we start at 0 
time(p2) = 0 

# we receive m2 first 
time(p2) = max(2, time(p2)) + 1 = max(2, 0) + 1 = 3 

# we receive m1 second 
time(p2) = max(1, time(p2)) + 1 = max(1, 3) + 1 = 4 

(time(p2)) m2 3의 시간을 가지고 있으며, m1는 순서의 반대 4의 시간이있는 메시지 원래 보냈습니다.


Lamport 타임 스탬프에는 일관된 여행 시간이 필요합니까?

답변

0

메시지 시간은 메시지를 수신하는 프로세스의 시간이 아니라 메시지에 포함 된 시간입니다.

타이머는 두 프로세스간에 논리적으로 공유되므로 두 프로세스에서 이벤트 (송신)를 계산해야하므로 수신자가 메시지를 수신 할 때 시간을 추가하는 이유가됩니다.

알고리즘은 메시지가 손실되거나 지연되는 경우에도 두 프로세스의 타이머를 동기화하려고 시도합니다. 그 이유는 수신자가 메시지에서 발견 된 시간과 보낸 사람의 시각을 최대한 볼 수 있기 때문입니다 . 일치하지 않으면 일부 메시지가 손실되거나 지연됩니다. 두 프로세스가 시간에 대한 다른 시각을 갖게되지만 다음 메시지가 보내고받을 때 (두 방향 모두에서) 시계가 다시 동기화됩니다.

두 프로세스가 동시에 메시지를 보내는 경우 두 메시지는 같은 시간을 포함하므로 전체 순서가 아닙니다. 그러나 시계는 결국 결국 다시 동기화됩니다.

+0

나는 내가 이해하는지 확신하지 못한다. p2에서 메시지를 수신하는 타임 스탬프가 p1에서 메시지를 보내는 타임 스탬프와 동일한 방식 (< or >)으로 정렬되어야한다는 요지가 아니라고 말하고 있습니까? 그렇다면 논리적 클록의 포인트/용도는 어쨌든 무엇입니까? – hmm

+0

@hmm 메시지의 타임 스탬프는 다시 쓰여지지 않습니다. 그들은 메시지가 보내 졌을 때와 마찬가지입니다. 그래서, 아니요, "타임 스탬프를받습니다"라는 의도는 아닙니다. 그러나 메시지에 대한 회신 또는 링크 된 아티클의 첫 번째 단락에있는 동기 부여 예제에서와 같이 메시지에 의해 트리거 된 다른 작업은 응답하는 메시지보다 더 큰 타임 스탬프를 가져야합니다. 네트워크 이벤트 주문의 정도. – rici

+0

WP 기사에서 지적했듯이, 이것은 벡터 시계에 대한 발판이됩니다. 네트워크 시계의 가치를 이해하기 위해이 알고리즘의 응용 및 단점을 이해하는 것이 유용합니다. 나는 Lamport의 논문을 읽는 것이 좋습니다. 학문적이지만, 그들은 일반적으로 꽤 읽기 쉽습니다. – rici