Tại sao số đồng thuận cho thử nghiệm và thiết lập, 2?


17

Theo Wikipedia ,

Hoạt động kiểm tra và thiết lập có thể giải quyết vấn đề đồng thuận chờ đợi không quá hai quy trình đồng thời.

Tại sao nó không thể giải quyết vấn đề trong hơn hai quy trình?

Câu trả lời:


17

Để đảm bảo chúng tôi ở trên cùng một trang, trước tiên chúng ta hãy xem xét ba định nghĩa sau:

Định nghĩa. Test-and-set là một hướng dẫn đọc-sửa-ghi trên một số thanh ghi nhị phân (giả sử 0 và 1 là các giá trị có thể) trong đó một luồng lấy giá trị cũ và ghi 1.

Định nghĩa. Đạt được sự đồng thuận giữa luồng iff tất cả n luồng quyết định trên cùng một giá trị (yêu cầu tính nhất quán) và tất cả các luồng quyết định giá trị thực sự được đề xuất bởi một trong các luồng (yêu cầu hợp lệ).nn

Khiếm khuyết. Một giao thức đồng thuận là iff chờ miễn phí mỗi cuộc gọi phương thức kết thúc trong một số bước hữu hạn.

Bây giờ làm theo hai bản phác thảo bằng chứng.

Yêu cầu 1. Số lượng đồng thuận của thử nghiệm và thiết lập ít nhất là 2. Bằng chứng. Giả sử rằng chúng ta có hai luồng 0 và 1 cần đạt được sự đồng thuận. Chúng ta có thể làm điều này bằng cách cho phép mỗi luồng theo giao thức đồng thuận bên dưới:

  1. Viết giá trị đề xuất của bạn vào , trong đó t là id luồng và A là một mảng có kích thước 2.A[t]tA
  2. Thực hiện hướng dẫn kiểm tra và thiết lập trên một số thanh ghi , với R được khởi tạo thành 0.RR
  3. Nếu giá trị trả về là 0, bạn là người đầu tiên: return . Mặt khác, bạn đứng thứ hai: return A [ | t - 1 | ] .A[t]A[|t1|]

Bạn có thể tự kiểm chứng rằng sự đồng thuận và chờ đợi được thỏa mãn.

(Đối với bằng chứng tiếp theo, tôi sẽ lồng một số bằng chứng và định nghĩa vì tôi nghĩ nó sẽ giúp việc theo dõi dễ dàng hơn.)

Yêu cầu 2. Số lượng đồng thuận của thử nghiệm và thiết lập nhiều nhất là 2. Bằng chứng. Do mâu thuẫn. Giả sử chúng ta có ba luồng , BC muốn quyết định các giá trị a , bc tương ứng và chúng ta có một số giao thức đồng thuận chờ đợi hợp lệ được triển khai bằng cách sử dụng thử và đọc (và đọc và ghi nguyên tử ).ABCmộtbc

Chúng ta có thể hình dung quá trình đồng thuận như một cây được định hướng, trong đó:

  • Root là trạng thái mà không có chủ đề nào 'thực hiện một động thái';
  • Con trái của một nút đại diện cho trạng thái kết quả sau khi di chuyển bởi , con giữa biểu thị trạng thái kết quả sau khi di chuyển bởi B và con phải biểu thị trạng thái dẫn đến sau khi di chuyển bằng C ;MộtBC
  • Một nút lá đại diện cho một trạng thái trong đó tất cả các chủ đề đã kết thúc. Liên kết với một nút lá là một giá trị , b hoặc c , trong đó giá trị phụ thuộc vào giá trị nào được quyết định cho việc thực hiện cụ thể đó.mộtbc

Định nghĩa. Hãy để một nhà nước là đa trị nếu kết quả của quá trình đồng thuận chưa được xác định. Nói cách khác, không phải tất cả các xen kẽ có thể có của các di chuyển còn lại đều dẫn đến cùng một kết quả. Hãy để một nhà nước thống nhất khi kết quả của quá trình đồng thuận được xác định.

Rễ là đa trị. Bằng chứng. Nếu chỉ có một luồng hoạt động và các luồng khác nằm im lìm mãi mãi, thì X sẽ hoàn thành trong một số bước hữu hạn (được đảm bảo bởi giả định chờ đợi) và nó sẽ quyết định x (vì nó chỉ có quyền truy cập vào giá trị này và quyết định sẽ đáp ứng yêu cầu hiệu lực đồng thuận). Vì vậy, đối với tình hình của chúng tôi, a , bc đều là kết quả có thể xảy ra. XXxmộtbc

Định nghĩa. Đặt trạng thái quan trọng là trạng thái đa trị, với thuộc tính bổ sung mà di chuyển theo sẽ xác định a và di chuyển của B sẽ xác định b .MộtmộtBb

Có tồn tại một trạng thái quan trọng. Bằng chứng. Từ trên chúng ta biết rằng chúng ta bắt đầu trong một trạng thái đa trị. Để không di chuyển chút nào. Miễn là A hoặc B không buộc cây vào trạng thái không đồng nhất, hãy để nó di chuyển. Wait-freeness đảm bảo rằng cây là hữu hạn, vì vậy tại một số điểm phải gặp phải một trạng thái quan trọng. CMộtB

Bây giờ hãy xem xét một kịch bản mà chúng ta đang ở trong một trạng thái quan trọng. Có ít nhất hai khả năng:

1) thực hiện di chuyển của nó (từ đó xác định a ) và dừng lại. B sau đó thực hiện di chuyển và dừng lại. C tiếp theo chạy cho đến khi nó kết thúc, cuối cùng quyết định a .MộtmộtBCmột

2) di chuyển (do đó xác định b ) và dừng lại. Tiếp theo C chạy cho đến khi nó kết thúc, cuối cùng quyết định b . A không thực hiện một động thái.BbCbMột

Vì các lần đọc và ghi nguyên tử có sự đồng thuận số 1, nên các bước di chuyển của B phải là các hướng dẫn kiểm tra và thiết lập trên cùng một thanh ghi (nếu các thanh ghi khác nhau, thì C sẽ không thể biết thứ tự AA Động thái của B đã xảy ra). Từ quan điểm của C , sau đó, các kịch bản 1 và 2 không thể phân biệt được, vì vậy chúng ta phải có C quyết định cả ab . Điều này là không thể. MộtBCMộtBCCmộtb

Rằng hướng dẫn kiểm tra và thiết lập có số 2 đồng thuận theo cả hai Khiếu nại 1 và 2.


Cảm ơn câu trả lời của Roy. Bạn có thể chỉ ra bất kỳ tài liệu về chủ đề này là sáng suốt như lời giải thích của bạn? :). Tất cả các tài liệu tôi tìm thấy là quá chính thức.
sanatana

@sanatana: Tôi quên trả lời câu hỏi của bạn, tôi xin lỗi. Nếu nó vẫn phù hợp: Tôi đề xuất 'Nghệ thuật lập trình đa bộ xử lý' của Herlihy và Shavit (cụ thể là chương 5) và tài liệu khóa học của khóa học Đồng thời & đa luồng của Fokkink: cs.vu.nl/~tcs/cm (dựa trên Cuốn sách của Herlihy và Shavit). Ở dưới cùng của trang, bạn sẽ tìm thấy một liên kết đến các bài giảng video của Herlihy (bài giảng ngày 27 tháng 9 là về sự đồng thuận). Sau khi xem xét tài liệu tôi nhận ra rằng đủ để xem xét một cây nhị phân cho loại bằng chứng này. Có lẽ tôi sẽ cập nhật câu trả lời của tôi sau.
Roy O.

@RoyO. Tôi thấy rằng câu trả lời của bạn cho thấy rằng không có cách nào để đạt được sự đồng thuận với 3 quy trình. Chỉ muốn hiểu nếu bằng bất kỳ cách nào chúng tôi đã chứng minh rằng chúng tôi vẫn có thể đạt được sự đồng thuận nhưng giao thức đó sẽ không phải chờ đợi?
nguyên nhân cuối cùng

6

Bài viết trên wikipedia có một tài liệu tham khảo trả lời câu hỏi của bạn, nhưng có lẽ bạn không muốn đọc bài báo 26 trang đó. Tôi sẽ đưa ra một phiên bản đơn giản của bằng chứng (khá kỹ thuật), cho thấy rằng thử nghiệm và thiết lập không thể giải quyết sự đồng thuận nhị phân cho 3 quy trình. Loại lập luận này được sử dụng rộng rãi trong việc chứng minh số lượng đồng thuận.

Giả sử chúng ta có một thuật toán đồng thuận bằng cách sử dụng các thanh ghi TAS cho 3 quy trình.

Tại bất kỳ thời điểm nào, mỗi quá trình sẽ có một động thái (hướng dẫn) sẵn sàng để được thực hiện. Điều nào trong ba hướng dẫn sẽ được thực hiện là không xác định.

Giả sử rằng chúng ta đang ở trạng thái hai phần tử (trạng thái trong đó cả hai quyết định 0 hoặc 1 vẫn có thể) và bất kỳ quá trình nào di chuyển tiếp theo, trạng thái tiếp theo sẽ là thống nhất. Một trạng thái như vậy cuối cùng phải đạt được vì điều kiện chờ đợi miễn phí.

Giả sử (wlg) rằng nếu quá trình 1 di chuyển, trạng thái sẽ là 0 hóa trị và nếu quá trình 2 di chuyển, trạng thái sẽ là 1 hóa trị. Cả hai di chuyển phải là một hoạt động TAS (hoặc ít nhất là: một số loại ghi) trên cùng một thanh ghi, vì nếu chúng là các hoạt động TAS trên các thanh ghi riêng biệt, chúng ta không thể biết liệu quy trình 1 di chuyển trước hay quy trình 2 di chuyển trước.

Hãy xem xét hai vụ hành quyết có thể xảy ra:

  • Quá trình 1 di chuyển trước, sau đó xử lý 2 di chuyển, sau đó xử lý 3 chạy một mình
  • Quy trình 2 di chuyển trước, sau đó quy trình 3 chạy một mình

Từ quan điểm của quy trình 3, các trạng thái này không thể phân biệt được vì nó chỉ nhìn thấy giá trị được viết bởi quy trình 2. Tuy nhiên, trong trường hợp đầu tiên, nó sẽ cho 0 là đầu ra và trong 1 thứ hai là đầu ra. Rõ ràng, đây là một mâu thuẫn.

Các quy trình 1 và 2 có thể tự quyết định di chuyển trước (vì họ có thể thấy giá trị nào trong thanh ghi trước khi ghi) nhưng quy trình khán giả thứ ba không thể.


1

Một cách khác để chứng minh rằng thử nghiệm và thiết lập không thể được sử dụng để giải quyết sự đồng thuận của 3 bộ xử lý là chỉ ra rằng thử nghiệm và thiết lập có thể được thực hiện bằng cách sử dụng đồng thuận 2 bộ xử lý. Sau đó, giả sử rằng thử nghiệm và thiết lập có thể giải quyết sự đồng thuận 3 bộ xử lý dẫn đến mâu thuẫn: Giả sử rằng thử nghiệm và thiết lập có thể giải quyết đồng thuận 3 bộ xử lý; sau đó bằng cách thay thế kiểm tra và thiết lập bằng cách thực hiện bằng cách sử dụng đồng thuận 2 bộ xử lý, người ta có được việc thực hiện đồng thuận 3 bộ xử lý bằng đồng thuận 2 bộ xử lý, điều này là không thể. Do đó, test-and-set không thể giải quyết được sự đồng thuận của 3 bộ xử lý.

Để triển khai thử nghiệm và thiết lập cho bộ xử lý n bằng cách sử dụng đồng thuận 2 bộ xử lý, hãy để bộ xử lý xác định người chiến thắng thử nghiệm và thiết lập bằng cách sử dụng một giải đấu trong đó mỗi trận đấu được thực hiện bằng cách sử dụng đồng thuận 2 bộ xử lý (trong trận đấu, bộ xử lý đề xuất định danh của họ và kết quả đồng thuận cho họ biết ai là người chiến thắng).


0

Trong ý nghĩa thực tế, một định nghĩa đồng thuận ít nghiêm ngặt hơn có thể là đủ (ở đây tôi gọi nó là sự đồng thuận nhẹ):

Định nghĩa . Sự đồng thuận ánh sáng đạt được giữa n luồng iff (a) mỗi luồng quyết định trên cùng một giá trị hoặc không xác định được giá trị của nó, (b) ít nhất một luồng biết giá trị và (c) giá trị này thực sự được đề xuất bởi một trong các chủ đề.

Do đó, sự đồng thuận này theo nghĩa nhẹ hơn cho phép một số chủ đề không biết sự đồng thuận, giá trị được quyết định.

Hệ quả : Trong ý nghĩa thử nghiệm và thiết lập nhẹ hơn này có số lượng đồng thuận ánh sáng vô hạn.

Yêu cầu : Ý nghĩa nhẹ hơn này là thực tế. Ví dụ, để chọn chủ đề để vào phần quan trọng, không cần thiết phải tạo sự đồng thuận theo nghĩa chặt chẽ. Điều đó có nghĩa là: mỗi luồng phải biết liệu nó đã được chọn hay chưa, tuy nhiên nếu nó không được chọn thì nó sẽ không phải chọn cái nào được chọn. Nói cách khác, để loại trừ lẫn nhau - không cần sự đồng thuận, ánh sáng là đủ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.