Tôi hiện đang đọc Fuss, Futexes và Furwocks: Khóa người dùng nhanh trong Linux và đã xem qua trích dẫn này:
Trong sơ đồ khóa công bằng, khóa được cấp theo thứ tự được yêu cầu. Điều này có thể có tác động tiêu cực đến thông lượng do số lượng chuyển đổi ngữ cảnh tăng lên. Đồng thời nó có thể dẫn đến vấn đề được gọi là đoàn xe. Vì các khóa được cấp theo thứ tự đến, tất cả đều tiến hành ở tốc độ của quy trình chậm nhất, làm chậm tất cả các quy trình chờ. Một giải pháp chung cho vấn đề đoàn xe là đánh dấu khóa có sẵn khi phát hành, đánh thức tất cả các quy trình chờ đợi và yêu cầu chúng tái sử dụng khóa. Điều này được gọi là công bằng ngẫu nhiên. Tuy nhiên, điều này cũng dẫn đến vấn đề bầy đàn sấm sét. Mặc dù vậy, nó có thể hoạt động tốt trên các hệ thống vi xử lý nếu tác vụ đầu tiên đánh thức giải phóng khóa trước khi bị cấm hoặc lên lịch, cho phép thành viên bầy đàn thứ hai có được khóa, v.v ...
Tôi có một vài câu hỏi về trích dẫn này.
Đầu tiên, liệu một lược đồ khóa công bằng có dẫn đến số lượng chuyển đổi ngữ cảnh tăng lên không vì các tác vụ khác nhau đưa các quy trình vào hàng đợi tại các thời điểm khác nhau và do đó bằng cách phục vụ các quy trình theo thứ tự chúng được nhận, chúng ta sẽ chuyển đổi ngữ cảnh giữa nhiều tác vụ?
Thứ hai, làm thế nào để cấp các khóa theo thứ tự đến khiến các quá trình tiến hành ở tốc độ của quá trình chậm nhất? Đây sẽ không chỉ là trường hợp nếu quy trình chậm nhất được cấp khóa trước các quy trình khác? Tương tự như vậy, làm thế nào để có các quá trình tranh chấp ngẫu nhiên cho khóa giải quyết vấn đề đoàn xe?
Cuối cùng, tôi không hiểu làm thế nào công bằng ngẫu nhiên là tốt hơn trên các hệ thống xử lý đơn so với các hệ thống đa bộ xử lý. Ví dụ, trong cả hai trường hợp, tất cả các bộ xử lý đang chờ đều thức dậy, một cái bị khóa và những cái khác phải đi ngủ lại, phải không? Vậy làm thế nào để nó hoạt động tốt trên các hệ thống vi xử lý?