การบอกว่าแคชเป็นบัฟเฟอร์ชนิดพิเศษที่ถูกต้อง? พวกเขาทั้งสองทำหน้าที่คล้ายกัน แต่มีความแตกต่างพื้นฐานบางอย่างที่ฉันพลาดไปหรือไม่?
การบอกว่าแคชเป็นบัฟเฟอร์ชนิดพิเศษที่ถูกต้อง? พวกเขาทั้งสองทำหน้าที่คล้ายกัน แต่มีความแตกต่างพื้นฐานบางอย่างที่ฉันพลาดไปหรือไม่?
คำตอบ:
จากบทความของ Wikipedia เกี่ยวกับdata buffer :
บัฟเฟอร์เป็นพื้นที่ของหน่วยความจำกายภาพที่ใช้เก็บข้อมูลชั่วคราวในขณะที่มันถูกย้ายจากที่หนึ่งไปอีกที่หนึ่ง
บัฟเฟอร์ปลายขึ้นขี่จักรยานผ่านและถือทุกชิ้นส่วนของข้อมูลที่ถูกส่งมาจากสถานที่เก็บหนึ่งไปยังอีก (เช่นเมื่อใช้กันชนกลมในการประมวลผลเสียง) บัฟเฟอร์อนุญาตเพียงแค่นั้น - "บัฟเฟอร์" ของข้อมูลก่อนและหลังตำแหน่งปัจจุบันของคุณในกระแสข้อมูล
อันที่จริงมีลักษณะทั่วไปบางอย่างของบัฟเฟอร์และแคช อย่างไรก็ตามแคชในความหมายทั่วไปมักจะไม่เก็บข้อมูลทั้งหมดเมื่อถูกย้ายจากที่หนึ่งไปยังอีกที่หนึ่ง (เช่นแคช CPU)
วัตถุประสงค์ของแคชคือการจัดเก็บข้อมูลในลักษณะที่โปร่งใสเช่นมีข้อมูลเพียงพอที่จะถูกแคชเพื่อให้สามารถถ่ายโอนข้อมูลที่เหลือโดยไม่มีการลงโทษประสิทธิภาพ ในบริบทนี้แคชเพียง "ดึงข้อมูลล่วงหน้า" จำนวนเล็กน้อยของข้อมูล (ขึ้นอยู่กับอัตราการถ่ายโอนขนาดแคช ฯลฯ ... )
ความแตกต่างที่สำคัญคือบัฟเฟอร์จะเก็บข้อมูลทั้งหมดในที่สุด ในทางกลับกันแคชอาจมีข้อมูลทั้งหมดบางส่วนหรือไม่มีเลย (ขึ้นอยู่กับการออกแบบ) อย่างไรก็ตามมีการเข้าถึงแคชราวกับว่าคุณกำลังเข้าถึงข้อมูลโดยตรงตั้งแต่แรกสิ่งที่ได้รับแคชอย่างชัดเจนนั้นโปร่งใสกับ "ผู้ใช้" ของแคช
ความแตกต่างคือในอินเตอร์เฟซ เมื่อคุณใช้แคชเพื่อเข้าถึงแหล่งข้อมูลคุณใช้มันราวกับว่าแคชเป็นแหล่งข้อมูล - คุณสามารถเข้าถึงทุกส่วนของแหล่งข้อมูลผ่านแคชและแคชจะเป็นตัวกำหนดว่าข้อมูลมาจากที่ใด แคชตัวเองหรือแหล่งที่มา) แคชเองกำหนดว่าส่วนใดของข้อมูลที่จะโหลดล่วงหน้า (โดยปกติจะเป็นแค่จุดเริ่มต้น แต่บางครั้งก็ทั้งหมด) ในขณะที่อัลกอริทึมการแทนที่แคชที่ใช้อยู่จะเป็นตัวกำหนดว่าเมื่อใดสิ่งต่างๆจะถูกลบออกจากแคช ตัวอย่างที่ดีที่สุดของสิ่งนี้คือระบบนอกเหนือจากตัวแคช CPUคือprefetcher / readahead. ทั้งโหลดส่วนของข้อมูลที่พวกเขาคิดว่าคุณจะใช้มากที่สุดในหน่วยความจำและเปลี่ยนกลับไปใช้ฮาร์ดไดรฟ์หากมีบางสิ่งไม่แคช
ในทางกลับกันบัฟเฟอร์ไม่สามารถใช้เพื่อย้ายตำแหน่งของคุณทันทีในสตรีมข้อมูลยกเว้นว่าส่วนใหม่ได้ถูกย้ายไปยังบัฟเฟอร์แล้ว หากต้องการทำเช่นนั้นจะต้องใช้บัฟเฟอร์ในการเปลี่ยนตำแหน่ง (เนื่องจากตำแหน่งใหม่เกินความยาวของบัฟเฟอร์) ทำให้คุณต้อง "เริ่ม" บัฟเฟอร์ใหม่จากตำแหน่งใหม่อย่างมีประสิทธิภาพ ตัวอย่างที่ดีที่สุดคือการเลื่อนตัวเลื่อนในวิดีโอ Youtube
อีกตัวอย่างที่ดีของบัฟเฟอร์คือการเล่นไฟล์เสียงใน Winamp เนื่องจาก CPU จำเป็นต้องถอดรหัสไฟล์เสียงจึงต้องใช้เวลาสักครู่ก่อนที่เพลงจะถูกอ่านเข้าไปจนถึงเมื่อมีการประมวลผลเสียงจนถึงเมื่อมันถูกส่งไปยังการ์ดเสียงของคุณ Winamp จะบัฟเฟอร์ข้อมูลเสียงบางส่วนเพื่อให้มีข้อมูลเสียงเพียงพอที่ได้รับการประมวลผลแล้วเพื่อหลีกเลี่ยง "การล็อคอัพ" (เช่น CPU มักจะเตรียมเสียงที่คุณจะได้ยินในไม่กี่ร้อยมิลลิวินาทีไม่เคยเป็นแบบเรียลไทม์ สิ่งที่คุณได้ยินมาจากบัฟเฟอร์ซึ่งเป็นสิ่งที่ CPU เตรียมไว้ในอดีต)
มันจะแม่นยำมากขึ้นถ้าจะบอกว่าแคชเป็นรูปแบบการใช้งานเฉพาะของบัฟเฟอร์ซึ่งหมายถึงการใช้ข้อมูลเดียวกันหลายครั้ง การใช้งานส่วนใหญ่ของ "บัฟเฟอร์" หมายความว่าข้อมูลจะถูกระบายหรือทิ้งหลังจากการใช้งานครั้งเดียว (แม้ว่าจะไม่จำเป็นต้องเป็นกรณีนี้) ในขณะที่ "แคช" หมายถึงว่าข้อมูลจะถูกนำมาใช้ซ้ำหลายครั้ง การแคชมักจะบอกเป็นนัยว่าข้อมูลนั้นถูกจัดเก็บตามที่มันถูกใช้พร้อมกันแม้ว่าจะไม่จำเป็นต้องเป็นกรณี (เช่นในการดึงข้อมูลล่วงหน้าและสิ่งที่คล้ายกัน) ในขณะที่การบัฟเฟอร์แสดงว่าข้อมูลถูกเก็บไว้เพื่อใช้ในภายหลัง
อย่างไรก็ตามมีการเหลื่อมกันอย่างมากทั้งในการติดตั้งและใช้งาน
ความแตกต่างที่สำคัญอย่างหนึ่งระหว่างแคชและบัฟเฟอร์คือ:
บัฟเฟอร์เป็นส่วนหนึ่งของหน่วยความจำหลัก มันเป็นโครงสร้างที่มีอยู่และเข้าถึงได้จากหน่วยความจำหลัก (RAM)
ในทางกลับกันแคชเป็นหน่วยความจำกายภาพแยกต่างหากในลำดับชั้นหน่วยความจำของคอมพิวเตอร์
บางครั้งก็เรียกบัฟเฟอร์ด้วย - แคชบัฟเฟอร์ ชื่อนี้เน้นความจริงที่ว่าการใช้บัฟเฟอร์คล้ายกับแคชคือการเก็บข้อมูล ในขณะที่ความแตกต่างอยู่ในบริบทของการใช้งาน
บัฟเฟอร์ใช้สำหรับจัดเก็บข้อมูลชั่วคราวในขณะที่ข้อมูลถูกย้ายจากวัตถุหนึ่งไปยังอีกวัตถุหนึ่ง EX: เมื่อวิดีโอถูกย้ายจากอินเทอร์เน็ตไปยังพีซีของเราสำหรับบัฟเฟอร์หน้าจอจะใช้ในการจัดเก็บเฟรมของวิดีโอซึ่งจะแสดงต่อไป (นี่จะเพิ่ม QoS เนื่องจากวิดีโอจะเรียกใช้อย่างราบรื่นหลังจากกระบวนการ BUFFERING ที่ประสบความสำเร็จ) EX: ตัวอย่างอื่นคือสถานการณ์เมื่อเราเขียนข้อมูลลงในไฟล์ของเรา ข้อมูลที่เขียนใหม่จะไม่ถูกคัดลอกไปยังหน่วยความจำรองทันที การเปลี่ยนแปลงที่ทำจะถูกเก็บไว้ในบัฟเฟอร์จากนั้นตามนโยบายที่ออกแบบไว้การเปลี่ยนแปลงจะสะท้อนกลับไปยังไฟล์ในหน่วยความจำรอง (ฮาร์ดดิสก์)
ในทางตรงกันข้ามแคชจะถูกใช้ระหว่างหน่วยความจำหลักและตัวประมวลผลเพื่อเชื่อมช่องว่างระหว่างความเร็วของการเรียกใช้ RAM และตัวประมวลผล นอกจากนี้ข้อมูลที่เข้าถึงบ่อยที่สุดจะถูกเก็บไว้ในแคชเพื่อลดการเข้าถึง RAM
สิ่งที่พบได้ทั่วไป: ทั้งคู่เป็นส่วนประกอบหน่วยเก็บข้อมูลกลาง (ซอฟต์แวร์หรือฮาร์ดแวร์) ระหว่างการคำนวณและที่เก็บข้อมูล "หลัก"
ให้ฉันแตกต่างดังต่อไปนี้:
กันชน:
แคช: