Một loại câu hỏi lập trình chức năng cho người mới ở đây:
Tôi đã đọc bản dịch của một số bài nói chuyện của Rich Hickey và trong một số bài nổi tiếng hơn của anh ấy, anh ấy khuyên bạn nên sử dụng hàng đợi như một cách thay thế để có chức năng gọi cho nhau. (Ví dụ: trong Thiết kế, Thành phần và Hiệu suất và Đơn giản Dễ dàng .)
Tôi không hiểu điều này, ở một số khía cạnh:
Có phải anh ta đang nói về việc đưa dữ liệu vào hàng đợi và sau đó mỗi chức năng sử dụng nó? Vì vậy, thay vì chức năng gọi hàm B để thực hiện tính toán riêng của mình, chúng ta chỉ có chức năng B tát đầu ra của nó trên hàng đợi và sau đó có chức năng A lấy nó? Hoặc, thay vào đó, chúng ta đang nói về việc đưa các hàm lên hàng đợi và sau đó áp dụng chúng liên tục vào dữ liệu (chắc chắn là không, vì điều đó sẽ liên quan đến đột biến lớn, phải không? Và cũng nhân lên hàng đợi cho các hàm đa năng, hoặc giống như cây hoặc cái gì đó? )
Làm thế nào mà làm cho mọi thứ đơn giản hơn? Trực giác của tôi sẽ là chiến lược này sẽ tạo ra sự phức tạp hơn, bởi vì hàng đợi sẽ là một loại trạng thái, và sau đó bạn phải lo lắng "nếu một số chức năng khác lẻn vào và đặt một số dữ liệu lên hàng đợi thì sao?"
Một câu trả lời cho câu hỏi triển khai trên SO cho thấy ý tưởng này đang tạo ra một loạt các hàng đợi khác nhau. Vì vậy, mỗi hàm đặt đầu ra của nó trong hàng đợi riêng (??). Nhưng điều đó cũng làm tôi bối rối, bởi vì nếu bạn đang chạy một hàm một lần, thì tại sao nó lại cần một hàng đợi cho đầu ra của nó khi bạn có thể lấy đầu ra đó và đặt một tên trên đó là một (var, nguyên tử, nhập lớn bảng băm, bất cứ điều gì). Ngược lại, nếu một chức năng đang chạy nhiều lần và bạn dán đầu ra của nó vào hàng đợi, thì bạn lại tự gây ra trạng thái cho mình và bạn phải lo lắng về thứ tự mà mọi thứ được gọi, các hàm hạ lưu trở nên kém tinh khiết hơn, Vân vân.
Rõ ràng tôi không hiểu vấn đề ở đây. Ai đó có thể giải thích một chút?
Job
đối tượng chung , đẩy nó vào hàng đợi và có một hoặc nhiều luồng worker hoạt động trên hàng đợi đó. Sau Job
đó gửi thêm Job
s vào hàng đợi sau khi hoàn thành. Giá trị trả về được thay thế bằng các cuộc gọi lại trong khái niệm đó. Đó là một cơn ác mộng để gỡ lỗi và xác minh khi bạn thiếu ngăn xếp cuộc gọi, và hiệu quả và linh hoạt vì cùng một lý do.