Câu hỏi tuyệt vời. Tôi không thể nhớ khóa học CS 102 của chúng tôi đề cập đến một ứng dụng duy nhất cho hàng đợi hai đầu.
Cho đến ngày nay, ứng dụng duy nhất tôi biết là bộ lập lịch ăn cắp công việc được đề cập trong bài viết Wikipedia .
Nó hoạt động về cơ bản như sau:
Trong một mô hình thủ tục đơn luồng thông thường, mọi lệnh gọi hàm sẽ đẩy một bản ghi kích hoạt trên một ngăn xếp cuộc gọi được gọi là . Một bản ghi kích hoạt chứa các biến cục bộ và tham số của cuộc gọi đó. Khi cuộc gọi đến phương thức được hoàn thành (Hồi trả về), bản ghi kích hoạt cuối cùng được bật từ ngăn xếp cuộc gọi.
Điều này đặc biệt quan trọng bởi vì đó là cách thức đệ quy được thực hiện: cấu trúc của đệ quy được thể hiện trong trạng thái hiện tại của ngăn xếp cuộc gọi.
Khi song song thuật toán đệ quy, chúng ta có thể khai thác thuộc tính này bằng cách thay thế ngăn xếp cuộc gọi bằng hàng đợi cuộc gọi. Mỗi luồng trong tính toán có hàng đợi cuộc gọi riêng của nó và đẩy và bật các bản ghi kích hoạt như trong một thực thi tuần tự.
Nhưng một khi một luồng đã hoàn thành công việc của nó (= hàng đợi cuộc gọi của nó trống), nó sẽ đánh cắp công việc từ một luồng khác bằng cách xóa một bản ghi kích hoạt khỏi hàng đợi cuộc gọi của luồng đó bằng cách xóa khỏi đầu cuối của nhầm lẫn.
Về cơ bản, hàng đợi cuộc gọi hoạt động như hai ngăn xếp cuộc gọi hiện phục vụ hai luồng.