Bài giảng Lập trình đồng thời và phân tán - Bài 8: Bài toán bầu cử cung cấp cho người học các kiến thức: Bài toán bầu cử, thuật toán dựa trên vòng tròn (thuật toán Chang-Roberts, thuật toán Hirschberg-Sinclair). Mời các bạn cùng tham khảo.
LẬP TRÌNH ĐỒNG THỜI & PHÂN TÁN BÀI 8: BÀI TOÁN BẦU CỬ Giảng viên: Lê Nguyễn Tuấn Thành Email: thanhlnt@tlu.edu.vn NỘI DUNG ▪Bài toán bầu cử ▪Thuật toán dựa vòng tròn ▪Thuật tốn Chang-Roberts ▪Thuật tốn Hirschberg-Sinclair Bài giảng có sử dụng hình vẽ sách “Concurrent and Distributed Computing in Java, Vijay K Garg, University of Texas, John Wiley & Sons, 2005” Bài toán bầu cử ▪ Một toán quan trọng hệ thống phân tán Bài tốn bầu cử tiến trình lãnh đạo ▪ Tiến trình lãnh đạo sử dụng người điều phối thuật toán tập trung cho toán mutex Giao diện Election ▪ Phương thức getLeader() trả định danh tiến trình chọn lãnh đạo ▪ Nếu định danh tiến trình lãnh đạo chưa biết, phương thức khóa người lãnh đạo chọn Bài toán bầu cử: Giải pháp (1) ▪ Bài toán bầu cử người lãnh đạo tương tự toán loại trừ lẫn ▪ Trong toán, quan tâm đến việc chọn số tiến trình, gọi tiến trình đặc quyền ▪ Các giải pháp dựa người điều phối cho tốn mutex khơng thể áp dụng cho toán bầu cử người lãnh đạo ▪ Lý do: việc định tiến trình đóng vai trò người điều phối giữ token tương đương với toán bầu cử người lãnh đạo Bài toán bầu cử: Giải pháp (2) ▪ Thuật toán mutex Lamport áp dụng cho tốn bầu cử ▪ Tiến trình vào CS xem người lãnh đạo ▪ Tuy nhiên thuật tốn khơng tổng qt, do: ▪ Nền tảng giao tiếp mạng phía phải kết nối hồn tồn ▪ Các thông điệp phải truyền theo thứ tự FIFO ▪ Mỗi tiến trình phải giao tiếp với tiến trình khác Bài tốn bầu cử: Giải pháp (3) Trong trường hợp tiến trình hệ thống phân tán xếp theo hình tròn, tồn thuật toán hiệu toán bầu cử Thuật tốn dựa vòng tròn Ring-based algorithms Yêu cầu ▪Các thuật toán cho toán bầu cử người lãnh đạo giả định tiến trình có định danh Thuật toán Chang-Roberts ▪ Đảm bảo tiến trình với định danh lớn lựa chọn tiến trình lãnh đạo ▪ Mỗi tiến trình: ▪ Chỉ gửi thơng điệp cho hàng xóm bên trái ▪ Chỉ nhận thơng điệp từ hàng xóm bên phải ▪ Các tiến trình khơng biết tổng số tiến trình hệ thống, khơng biết định danh tiến trình khác 10 Các bước thực (1) Mỗi tiến trình Pi gửi thông điệp tự ứng cử (election) với định danh cho tiến trình bên trái ▪ Nếu chưa nhận thơng điệp từ tiến trình với định danh cao Khi Pi nhận thơng điệp election từ tiến trình bên phải: ▪ Tiến trình chuyển tiếp thơng điệp với id lớn id sang bên trái ▪ Ngược lại (e.g id thông điệp nhỏ id nó), tiến trình nuốt thơng điệp 11 Các bước thực (2) Nếu tiến trình Pk nhận lại thơng điệp tự ứng cử (election) ▪ Nó biết thân tiến trình lãnh đạo thông báo cách gửi thông điệp leader tới tất tiến trình khác Khi tiến trình Pk nhận lại thơng điệp leader ▪ Nó hiểu tất tiến trình khác biết tiến trình lãnh đạo 12 public class RingLeader extends Process implements Election { int number; int leaderId = -1; int next; boolean awake = false; … public synchronized int getLeader(){ while (leaderId == -1) myWait(); return leaderId; } public synchronized void handleMsg(Msg m, int src, String tag) { int j = m.getMessageInt(); // get the number if (tag.equals("election")) { if (j > number) sendMsg(next, "election", j); // forward the message else if (j == number) // I won! sendMsg(next, "leader", myId); else if ((j < number) && !awake) startElection(); } else if (tag.equals("leader")) { leaderId = j; notify(); if (j != myId) sendMsg(next, "leader", j); } } public synchronized void startElection() { awake = true; sendMsg(next, "election", number); } } 13 Đánh giá: trường hợp tồi & tốt Độ phức tạp thông điệp trường hợp xấu Độ phức tạp trung bình O(N log 14 Thuật toán Hirschberg-Sinclair (1) ▪ Giả sử việc truyền thơng vòng tròn theo chiều ▪ Có thể gửi thông điệp sang bên trái bên phải ▪ Ý tưởng: thực việc bầu cử tập tiến trình với số lượng tăng dần sau vòng bầu cử ▪ Một tiến trình Pi cố gắng bầu cho vòng r ▪ Chỉ tiến trình thắng vòng r tiến vào vòng r+1 15 Thuật tốn Hirschberg-Sinclair (2) ▪ Tiến trình Pi tiến trình lãnh đạo vòng r Pi có định danh lớn tất tiến trình với khoảng cách nhỏ 2r tính từ Pi ▪ Hai tiến trình bầu lãnh đạo sau vòng r phải có khoảng cách 2r ▪ Sau vòng r, có nhiều N/(2r-1 + 1) tiến trình lãnh đạo ▪ Sau vòng, số lượng tiến trình lãnh đạo giảm đi, sau O(log N) vòng xác tiến trình lãnh đạo ▪ Ở vòng có nhiều O(N) thơng điệp, tổng số thơng điệp O(N log N) 16 Ví dụ ▪ Khởi đầu: ▪ Tất tiến trình người lãnh đạo ▪ Vòng 0: ▪ 6, 7, người lãnh đạo ▪ Vòng 1: ▪ 7, người lãnh đạo ▪ Vòng 2: ▪ người lãnh đạo 17 Tài liệu tham khảo ▪ Concurrent and Distributed Computing in Java, Vijay K Garg, University of Texas, John Wiley & Sons, 2005 ▪ Tham khảo: ▪ Principles of Concurrent and Distributed Programming, M Ben-Ari, Second edition, 2006 ▪ Foundations of Multithreaded, Parallel, and Distributed Programming, Gregory R Andrews, University of Arizona, Addison-Wesley, 2000 ▪ The SR Programming Language: Concurrency in Practice, Benjamin/Cummings, 1993 ▪ Xử lý song song phân tán, Đoàn văn Ban, Nguyễn Mậu Hân, Nhà xuất Khoa học Kỹ thuật, 2009 18 ... tiến trình Pi cố gắng bầu cho vòng r ▪ Chỉ tiến trình thắng vòng r tiến vào vòng r+1 15 Thuật tốn Hirschberg-Sinclair (2) ▪ Tiến trình Pi tiến trình lãnh đạo vòng r Pi có định danh lớn tất tiến trình. .. University of Texas, John Wiley & Sons, 2005” Bài toán bầu cử ▪ Một toán quan trọng hệ thống phân tán Bài tốn bầu cử tiến trình lãnh đạo ▪ Tiến trình lãnh đạo sử dụng người điều phối thuật toán... điệp phải truyền theo thứ tự FIFO ▪ Mỗi tiến trình phải giao tiếp với tiến trình khác Bài toán bầu cử: Giải pháp (3) Trong trường hợp tiến trình hệ thống phân tán xếp theo hình tròn, tồn thuật tốn