Hàng đợi giống như một danh sách chờ đợi.
Hãy tưởng tượng bạn đang xếp hàng chờ mua sản phẩm mới nhất của Apple, nhận vé xem phim hoặc thanh toán cho hàng tạp hóa của mình.
Đây là hàng đợi!
Bạn có thể sử dụng hàng đợi trong các dự án Ruby của mình.
Làm thế nào?
Hàng đợi cho phép bạn xử lý mọi thứ theo thứ tự đến, vì vậy chúng có thể hữu ích cho bất kỳ điều gì yêu cầu mọi thứ được ưu tiên trong thời gian chờ đợi lâu hơn.
Bạn có thể áp dụng điều này cho :
- Lập mô hình hàng đợi trong thế giới thực
- Triển khai các thuật toán như Breadth-First Search (BFS)
- Kiểm soát quyền truy cập vào tài nguyên được chia sẻ, chẳng hạn như CPU, đĩa, máy in, v.v.
Bây giờ…
Hãy xem một số mã!
Cách triển khai hàng đợi trong Ruby
Một mảng có thể hoạt động giống như một Queue
nếu bạn sử dụng đúng phương pháp.
Các phương pháp này là :
-
unshift
(hoặcprepend
với Ruby 2.5+) -
pop
Khi bạn unshift
, bạn đang thêm một mục vào hàng đợi.
Ví dụ :
queue = [] queue.unshift "apple" queue.unshift "orange" queue.unshift "banana" # ["banana", "orange", "apple"]
Khi bạn pop
, bạn xóa mục cuối cùng khỏi hàng đợi.
Đây là mục tiếp theo cần được xử lý.
Ví dụ :
queue.pop # "apple" queue.pop # "orange"
Bạn có thể xem mục cuối cùng để xem “ai là người tiếp theo” mà không cần xóa mục này.
Ví dụ :
queue[-1] # "banana"
Thao tác này được gọi là peek
.
Hàng đợi đồng thời Ruby
Ruby có Queue
an toàn cho luồng, chặn lớp học.
Bạn có thể sử dụng hàng đợi này để điều phối công việc trong một chương trình đa luồng.
Ví dụ :
que = Queue.new que << 1 que << 2 que << 3
Bạn có thể lấy một mặt hàng ra khỏi hàng đợi này bằng pop
:
que.pop # 1 que.pop # 2
Nếu hàng đợi trống, hãy gọi pop
sẽ đặt chuỗi hiện tại của bạn ở chế độ ngủ & đợi cho đến khi thứ gì đó được thêm vào hàng đợi .
Đó là ý nghĩa của "chặn".
Bạn có thể tránh bị chặn bằng cách chuyển true
sang pop
:
que.pop(true)
Điều này sẽ tạo ra một ThreadError: queue empty
ngoại lệ khi hàng đợi trống.
Cách sử dụng hàng đợi có kích thước
Hàng đợi có kích thước giống như hàng đợi thông thường nhưng có giới hạn kích thước.
Ví dụ :
que = SizedQueue.new(5)
Khi hàng đợi đầy, push
(giống như <<
) hoạt động sẽ tạm dừng chuỗi hiện tại cho đến khi một mục được đưa ra khỏi hàng đợi.
Ví dụ :
que.push(:bacon)
Thay vào đó, bạn có thể chọn tăng một ngoại lệ, chuyển true
như một đối số:
que.push(:bacon, true)
Điều này làm tăng ThreadError: queue full
.
Hướng dẫn bằng video
Tóm tắt
Bạn đã học về hàng đợi Ruby!
Bạn có thể sử dụng hàng đợi khi cần xử lý công việc theo thứ tự FIFO (nhập trước xuất trước) . Có hai cách để triển khai hàng đợi , sử dụng một mảng hoặc sử dụng Queue
lớp học.
Cảm ơn vì đã đọc. 🙂