Câu trả lời chung chung
Semaphore là một kỹ thuật phân bổ tài nguyên để quản lý các bế tắc và điều kiện cuộc đua thông qua các hàng đợi ưu tiên. Nói một cách ẩn dụ, bạn có 3 chiếc xe đạp cho thuê. Giả sử, bạn thuê nó trên cơ sở đầu tiên đến trước phục vụ. Vì vậy, nếu bạn đã thuê cả 3 chiếc xe đạp của bạn và một người thứ tư yêu cầu, anh ta phải đợi cho đến khi một trong số họ mang chiếc xe đạp trở lại. Có nhiều khả năng bạn có thể đặt trước chiếc xe đạp cho ai đó, ai đó có thể hủy một chiếc xe đạp đã đặt trước và cứ thế. Tương tự trong trường hợp các quy trình muốn có được một số tài nguyên, semaphores được sử dụng.
Trong trường hợp của một semaphore phân tán, có thể có nhiều tài nguyên có thể được truy cập bởi nhiều quy trình. Giả sử một máy chủ lưu trữ một ứng dụng và có thể lưu trữ nhiều phiên bản của nó và người dùng có thể sử dụng ứng dụng đó nếu nó miễn phí. Đặt máy chủ là S1, S2, .. Sn trong khi ứng dụng là A1, A2, ... An và người dùng là U1, U2, ... Un. Vì vậy, nếu máy chủ đầu tiên có thể lưu trữ ba phiên bản của ứng dụng thì nó sẽ được ký hiệu là S1A1, S1A2, S1A3. Cũng giả sử các trường hợp ứng dụng là vị trí hoặc hộp để dễ hiểu. Một vị trí được coi là trống khi nó miễn phí và đầy đủ khi bận. Vì vậy, trong trường hợp này, phương pháp sau được đề xuất
- Người dùng yêu cầu ứng dụng
- Yêu cầu được chuyển đến hàng đợi ưu tiên.
- Hàng đợi chạy một quá trình nền liên tục để tìm kiếm các vị trí miễn phí và khi tìm thấy vị trí miễn phí, chuyển yêu cầu đến ứng dụng để bắt đầu xử lý
- Khi một vị trí nhận được yêu cầu, họ đánh dấu mình đang bận và bắt đầu xử lý và tự đánh dấu miễn phí khi họ xử lý xong
- Các vị trí phát định kỳ trạng thái của chúng đến hàng đợi để hàng đợi có thể chuyển tiếp các yêu cầu khi một vị trí trở nên miễn phí
Tài nguyên được đề xuất
- Mô hình này dựa trên môi giới tin nhắn tập trung. Hàng đợi xử lý yêu cầu phải luôn luôn có sẵn. Cũng có thể có mô hình không có môi giới có thể được thực hiện theo một cách khác
- Lập trình Semaphore trên Wikipedia
- Sách nhỏ về Semaphores là một nguồn tài nguyên tuyệt vời có sẵn miễn phí
- Semaphore dựa trên mô hình bộ nhớ chia sẻ. Mô hình diễn viên sẽ đưa ra một cái nhìn sâu sắc mới để giải quyết vấn đề này theo một cách khác
Câu trả lời cụ thể cho câu hỏi trong ngữ cảnh
Nhìn vào mã, tôi thích phiên bản cổ điển của một semaphore. Java có gói semaphore tích hợp để thực hiện điều này và bạn có thể dễ dàng xây dựng trên nó.
Cụ thể, tôi muốn biết mục tiêu bước đầu tốt hay hệ thống con đơn giản mà tôi có thể thực hiện là gì.
Giả sử chỉ có một phiên bản của ứng dụng được chạy trên mạng LAN
- Sử dụng gói được đề xuất ở trên
- Tạo semaphore với cơ chế hàng đợi tích hợp (tương tự như ngăn xếp) và thực hiện nó như một máy chủ
- Khi người dùng khởi động ứng dụng, nó sẽ tìm kiếm semaphore, giảm số đếm (trong trường hợp này chỉ là 0 vì chỉ cho phép một trường hợp duy nhất) và cung cấp cho người dùng quyền truy cập vào ứng dụng
- Khi một người dùng khác khởi động ứng dụng, nó sẽ tìm kiếm semaphore, vì nó là 0, đưa người dùng vào hàng đợi và đưa ra một thông báo cho người dùng rằng ứng dụng đang bận
- Khi người dùng đầu tiên thoát khỏi ứng dụng, semaphore được tăng lên, tài nguyên sẽ khả dụng, người dùng bị đe dọa và giờ anh ta có thể khởi động ứng dụng.
- Semaphore có thể được triển khai như một máy chủ độc lập (có thể với giao diện web đơn giản) có thể được ghép nối với ứng dụng.
Những cảnh báo sau đây đáng để suy nghĩ
- Hàng đợi có thể được xóa hoàn toàn hoặc ưu tiên có thể được thay đổi
- Ghép nối nó với ứng dụng như một máy chủ, yêu cầu sẽ chỉ có một phiên bản của máy chủ trên mạng LAN
- Chuẩn bị cho sự cố hoặc hàng đợi tin nhắn không giám sát (Truy cập yêu cầu của người dùng nhưng không khả dụng khi ứng dụng miễn phí)
Tôi có lẽ sẽ đề nghị những điều sau đây để hiểu rõ hơn
- Theo liên kết này để hiểu rõ hơn
- Hãy thử SCALA . Bạn có thể sử dụng tất cả các thư viện JAVA hiện có của mình cộng với bạn có được sự tương tranh tốt
- Hãy nhìn vào ZMQ . Đây có thể là tùy chọn nếu bạn trừu tượng hóa toàn bộ quá trình thành một ứng dụng nhắn tin riêng biệt tương tác với các tài nguyên
- Đọc về hệ thống cấp phép AutoCAD (họ triển khai mô hình cấp phép phù hợp với một số yêu cầu của bạn)
Câu trả lời EDIT được chỉnh sửa hoàn toàn vì câu trả lời ban đầu dựa trên quan điểm rộng hơn nhiều