Tôi muốn biết sự khác biệt thực tế giữa caching
và memoization
là gì.
Như tôi thấy, cả hai đều liên quan đến việc tránh các lệnh gọi hàm lặp lại để lấy dữ liệu bằng cách lưu trữ nó .
Sự khác biệt cốt lõi giữa cả hai là gì?
Tôi muốn biết sự khác biệt thực tế giữa caching
và memoization
là gì.
Như tôi thấy, cả hai đều liên quan đến việc tránh các lệnh gọi hàm lặp lại để lấy dữ liệu bằng cách lưu trữ nó .
Sự khác biệt cốt lõi giữa cả hai là gì?
Câu trả lời:
Memoization là một dạng bộ nhớ đệm cụ thể liên quan đến bộ nhớ đệm giá trị trả về của một hàm dựa trên các tham số của nó .
Bộ nhớ đệm là một thuật ngữ chung chung hơn; ví dụ: bộ nhớ đệm HTTP là bộ nhớ đệm nhưng không phải là bản ghi nhớ.
Wikipedia cho biết :
Mặc dù liên quan đến bộ nhớ đệm, ghi nhớ đề cập đến một trường hợp cụ thể của việc tối ưu hóa này, phân biệt nó với các hình thức bộ nhớ đệm như đệm hoặc thay thế trang.
If-Match
và hết hạn. Ghi nhớ chỉ có ý nghĩa đối với chức năng thuần túy, mà HTTP hiếm khi có.
Như tôi đã thấy chúng được sử dụng, "ghi nhớ" là "bộ nhớ đệm kết quả của một hàm xác định" có thể được sao chép bất kỳ lúc nào với cùng một chức năng và đầu vào.
"Bộ nhớ đệm" về cơ bản bao gồm bất kỳ chiến lược đệm đầu ra nào, cho dù giá trị nguồn có thể tái tạo được hay không tại một thời điểm nhất định. Trên thực tế, bộ nhớ đệm cũng được sử dụng để chỉ các chiến lược đệm đầu vào , chẳng hạn như bộ đệm ghi trên đĩa hoặc bộ nhớ. Vì vậy, nó là một thuật ngữ tổng quát hơn nhiều.
Tôi nghĩ rằng thuật ngữ bộ nhớ đệm thường được sử dụng khi bạn lưu trữ kết quả của các hoạt động IO hoặc về cơ bản là bất kỳ dữ liệu nào đến với bạn từ bên ngoài (tệp, mạng, truy vấn db). Ghi nhớ thuật ngữ thường áp dụng cho việc lưu trữ các kết quả tính toán của riêng bạn, chẳng hạn như trong ngữ cảnh của lập trình động.
Ghi nhớ là một dạng đặc biệt của bộ nhớ đệm kết quả của một hàm xác định. Điều này có nghĩa là bộ nhớ đệm kết quả bên ngoài hàm không phải là bản ghi nhớ vì hàm sẽ phải thay đổi bộ đệm khi tính toán một kết quả mới (chưa có trong bộ đệm) vì vậy nó sẽ không còn là một hàm (thuần túy) nữa. Memoization thường ngụ ý truyền bộ nhớ cache như một đối số bổ sung (trong một hàm trợ giúp). Memoization sẽ tối ưu hóa các chức năng cần tính giá trị nhiều lần cho một lần truy cập. Bộ nhớ đệm sẽ tối ưu hóa các chức năng được gọi nhiều lần với các tham số giống nhau. Nói cách khác, Memoization sẽ tối ưu hóa truy cập đầu tiên cho dù bộ đệm sẽ chỉ tối ưu hóa các truy cập lặp lại.