Một hàng đợi chặn (từ Joonas Pulakka) là câu trả lời nặng nề. Một câu trả lời đơn giản hơn có thể làm việc. Nếu bạn có tất cả dữ liệu được lưu trữ trong nguồn, bạn có thể chuyển tham chiếu đến bộ xử lý và nó có thể lấy dữ liệu ra khỏi nguồn. Tất nhiên, đây có lẽ là những gì bạn đã làm trong quá khứ. Bạn có thể không có tất cả dữ liệu trong bộ nhớ trong nguồn và bạn có thể không có được khớp nối thấp mà bạn muốn.
Bước tiếp theo sẽ là sử dụng giao diện Enumerator hoặc Iterator. (Các trình vòng lặp là phổ biến hơn trong Java, mặc dù hầu hết các lần remove
phương thức đó chỉ là một vấn đề.) Bộ xử lý sẽ lấy Iterator từ nguồn, sau đó gọi các phương thức cho đến khi hoàn thành. Nếu nguồn đang lấy terrabyte dữ liệu từ một nơi nào đó, mỗi cuộc gọi có thể mất một lúc. Nhưng nếu bạn sẽ ngủ bộ xử lý cho đến khi có thứ gì đó trong hàng đợi, thì điều này sẽ tự động làm điều đó. Và nếu nguồn đi trước nhà sản xuất, nguồn sẽ tự động chờ nhà sản xuất gọi hasNext
và next
.
Mặt khác, nếu bạn muốn nguồn lấy dữ liệu từ nguồn của nó nhanh nhất có thể và dự trữ nó cho đến khi bộ xử lý bắt kịp, không phải ngồi chờ bộ xử lý xử lý, thì hàng đợi - và nhiều luồng-- bắt đầu giống như một ý tưởng tốt, nếu phức tạp hơn. Bây giờ nguồn có thể chồng dữ liệu khi nó có thể chạy nhanh hơn (giới hạn của nó có lẽ là một cái gì đó giống như I / O của đĩa) và bộ xử lý có thể giảm kích thước của cọc khi nó có thể chạy nhanh hơn (giới hạn của nó là tốc độ bền bỉ nhanh như thế nào mô-đun có thể duy trì dữ liệu).