ฉันต้องการทราบความแตกต่างที่แท้จริงระหว่างcaching
และmemoization
คืออะไร
ขณะที่ผมเห็นมันทั้งสองเกี่ยวข้องกับการหลีกเลี่ยงการทำซ้ำสายงานที่จะได้รับข้อมูลโดยการจัดเก็บ
อะไรคือความแตกต่างหลักระหว่างทั้งสอง?
ฉันต้องการทราบความแตกต่างที่แท้จริงระหว่างcaching
และmemoization
คืออะไร
ขณะที่ผมเห็นมันทั้งสองเกี่ยวข้องกับการหลีกเลี่ยงการทำซ้ำสายงานที่จะได้รับข้อมูลโดยการจัดเก็บ
อะไรคือความแตกต่างหลักระหว่างทั้งสอง?
คำตอบ:
memoization เป็นรูปแบบเฉพาะของแคชที่เกี่ยวข้องกับการแคชค่าตอบแทนของฟังก์ชั่นที่อยู่บนพื้นฐานของพารามิเตอร์
การแคชเป็นคำทั่วไป ตัวอย่างเช่นการแคช HTTP เป็นการแคช แต่ไม่ใช่การบันทึก
Wikipedia พูดว่า :
แม้ว่าจะเกี่ยวข้องกับการแคช แต่การบันทึกจะหมายถึงกรณีเฉพาะของการเพิ่มประสิทธิภาพนี้โดยแยกความแตกต่างจากรูปแบบของการแคชเช่นการบัฟเฟอร์หรือการแทนที่เพจ
If-Match
และการหมดอายุ การบันทึกช่วยจำมีความหมายสำหรับฟังก์ชันบริสุทธิ์ซึ่ง HTTP ไม่ค่อยเป็นเช่นนั้น
อย่างที่ฉันเคยเห็นพวกเขาใช้ "การบันทึก" คือ "การแคชผลลัพธ์ของฟังก์ชันดีเทอร์มินิสติก" ที่สามารถทำซ้ำได้ตลอดเวลาโดยมีฟังก์ชันและอินพุตเดียวกัน
"การแคช" รวมถึงกลยุทธ์การบัฟเฟอร์เอาต์พุตโดยทั่วไปไม่ว่าค่าต้นทางจะสามารถทำซ้ำได้ในเวลาที่กำหนดหรือไม่ก็ตาม ในความเป็นจริงการแคชยังใช้เพื่ออ้างถึงกลยุทธ์การบัฟเฟอร์อินพุตเช่นการเขียนแคชบนดิสก์หรือหน่วยความจำ ดังนั้นมันจึงเป็นคำทั่วไปมากกว่า
ฉันคิดว่าการแคชคำมักจะใช้เมื่อคุณจัดเก็บผลลัพธ์ของการดำเนินการ IO หรือโดยพื้นฐานแล้วข้อมูลใด ๆ ที่มาถึงคุณจากภายนอก (ไฟล์, เครือข่าย, แบบสอบถามฐานข้อมูล) การบันทึกคำศัพท์มักใช้กับการจัดเก็บผลลัพธ์ของการคำนวณของคุณเองตัวอย่างเช่นในบริบทของการเขียนโปรแกรมแบบไดนามิก
การบันทึกเป็นรูปแบบพิเศษของการแคชผลลัพธ์ของฟังก์ชันดีเทอร์มินิสติก ซึ่งหมายความว่าการแคชผลลัพธ์ภายนอกฟังก์ชันไม่ใช่การบันทึกเนื่องจากฟังก์ชันจะต้องกลายพันธุ์แคชเมื่อคำนวณผลลัพธ์ใหม่ (ไม่ได้อยู่ในแคช) ดังนั้นจึงไม่เป็นฟังก์ชัน (บริสุทธิ์) อีกต่อไป การบันทึกโดยทั่วไปหมายถึงการส่งแคชเป็นอาร์กิวเมนต์เพิ่มเติม (ในฟังก์ชันตัวช่วย) การบันทึกช่วยจำจะเพิ่มประสิทธิภาพฟังก์ชันที่ต้องคำนวณค่าหลาย ๆ ครั้งสำหรับการเข้าถึงครั้งเดียว การแคชจะเพิ่มประสิทธิภาพฟังก์ชันที่เรียกหลายครั้งด้วยพารามิเตอร์เดียวกัน กล่าวอีกนัยหนึ่ง Memoization จะเพิ่มประสิทธิภาพการเข้าถึงครั้งแรกไม่ว่าการแคชจะเพิ่มประสิทธิภาพการเข้าถึงที่เกิดขึ้นซ้ำเท่านั้น
ฉันต้องการเพิ่มคำตอบที่ยอดเยี่ยมอื่น ๆ ที่การบันทึกช่วยจำเรียกอีกอย่างว่าแท็บ ฉันคิดว่าสิ่งสำคัญคือต้องรู้คำศัพท์นั้นสำหรับผู้ที่เรียนรู้ว่าการช่วยจำและการแคชคืออะไร