บัฟเฟอร์หมายความว่าอย่างไร


151

ฉันเห็นคำว่า"บัฟเฟอร์"ทุกที่ แต่ฉันไม่สามารถเข้าใจได้ว่ามันคืออะไร

  1. ใครช่วยอธิบายสิ่งที่บัฟเฟอร์ในภาษาของคนธรรมดา ?
  2. จะใช้เมื่อไหร่?
  3. มันใช้งานอย่างไร?

ฉันสังเกตเห็นว่า "บัฟเฟอร์" มีการเปลี่ยนแปลงเล็กน้อยในชื่อและพวกเขามีแนวโน้มที่จะเปลี่ยนไปตามสิ่งที่หน่วยความจำทางกายภาพถือและสิ่งที่ เช่นเดียวกับ "บัฟเฟอร์กราฟิก" เป็นอาร์เรย์สำหรับหน่วยความจำวิดีโอในขณะที่บัฟเฟอร์เครือข่ายอาจอยู่ใน RAM ปกติ ฉันไม่แน่ใจว่านี่เป็นมาตรฐานหรือเป็นเหตุการณ์ คล้ายกับคำตอบของ Ailayna ต่อท้าย
สตีเฟ่น J

คำตอบ:


269

ลองนึกภาพว่าคุณกำลังกินขนมจากชาม คุณทานชิ้นเดียวเป็นประจำ เพื่อป้องกันไม่ให้ชามหมดบางคนอาจเติมชามก่อนที่มันจะว่างเปล่าดังนั้นเมื่อคุณต้องการที่จะเอาชิ้นส่วนอื่นมีขนมในชาม

ชามทำหน้าที่เป็นบัฟเฟอร์ระหว่างคุณและถุงขนม

หากคุณกำลังดูภาพยนตร์ออนไลน์บริการบนเว็บจะดาวน์โหลดอย่างต่อเนื่องในอีก 5 นาทีหรือมากกว่านั้นในบัฟเฟอร์วิธีที่คอมพิวเตอร์ของคุณไม่จำเป็นต้องดาวน์โหลดภาพยนตร์ในขณะที่คุณกำลังดูอยู่ (ซึ่งจะทำให้แขวน)


93
+1: จำเป็นต้องใช้บัฟเฟอร์เมื่อผู้ผลิตและผู้บริโภคทำงานในอัตราที่ต่างกัน ขนมทำในปริมาณมาก แต่บริโภคในปริมาณน้อย - ห่วงโซ่อุปทานทั้งหมดจากผู้ผลิตสู่ปากเป็นชุดของบัฟเฟอร์
S.Lott

30
เปรียบเทียบที่ดีที่สุดตลอดกาล ทำให้ฉันกระหายน้ำตาล
Kyle Macey

บริการเว็บที่นี่คืออะไร บัฟเฟอร์อยู่ที่ไหน บริการเว็บเป็นโฮสต์ภาพยนตร์หรือไม่
Jwan622

นิยามที่มั่นคง ฉันคิดว่านั่นเป็นเหตุผลที่เราพูดว่าวิดีโอบัฟเฟอร์เมื่อหยุดและแถบความคืบหน้าแสดงเมื่อเราดูหนัง
Red M

นี่เป็นสิ่งที่ดีเป็นไปได้และเรียบง่าย
Jonas Grønbek

93

คำว่า "buffer" เป็นคำทั่วไปมากและไม่เฉพาะเจาะจงกับ IT หรือ CS เป็นสถานที่เก็บสิ่งชั่วคราวเพื่อลดความแตกต่างระหว่างความเร็วอินพุตและความเร็วเอาต์พุต ในขณะที่ผู้ผลิตนั้นเร็วกว่าผู้บริโภค แต่ผู้ผลิตสามารถเก็บเอาท์พุทในบัฟเฟอร์ต่อไปได้ เมื่อผู้ใช้บริการเร่งความเร็วก็สามารถอ่านได้จากบัฟเฟอร์ บัฟเฟอร์อยู่ตรงกลางเพื่อเชื่อมช่องว่าง


หากคุณเฉลี่ยคำจำกัดความที่http://en.wiktionary.org/wiki/bufferฉันคิดว่าคุณจะได้รับความคิด

เพื่อพิสูจน์ว่าเราทำจริง ๆ "ต้องเดิน 10 ไมล์คิดว่าหิมะทุกวันเพื่อไปโรงเรียน" ดูคู่มือการโทรด้วยเสียง TOPS-10 ปริมาณ 1ส่วน 11.9 "การใช้บัฟเฟอร์ I / O" ที่คั่นหน้า 11-24 อย่าอ่านว่าคุณกำลังฝันร้าย


1
+1 ฉันชอบคำอธิบายนี้ดีกว่า เท่าที่ฉันรักลูกอมตัวอย่างชามขนมเป็น IMO ยืดเล็กน้อย
Outlaw Programmer

10
ใช่ "สถานที่เก็บบางสิ่งชั่วคราวเพื่อลดความแตกต่างระหว่างความเร็วอินพุตและความเร็วเอาท์พุท" ผลรวมมันได้อย่างสมบูรณ์แบบ
ชิมแปนซี

1
ขอบคุณสำหรับคำอธิบายง่ายๆ อย่างไรก็ตาม URL PDF ที่แนบมานั้นตายไปแล้ว
ฮัสซัน

20

บัฟเฟอร์เป็นหน่วยความจำอันหนึ่งที่ใช้เก็บข้อมูล โดยทั่วไปแล้วมันมักจะเป็นหน่วยความจำหยดเดียวที่โหลดในการทำงานครั้งเดียวและจากนั้นจึงเทลงในตัวอย่าง "ชามขนม" ของ Perchik อย่างน้อยหนึ่งอย่าง ตัวอย่างเช่นในโปรแกรม C คุณอาจมี:

#define BUFSIZE 1024
char buffer[BUFSIZE];
size_t len = ;

// ... later
while((len=read(STDIN, &buffer, BUFSIZE)) > 0)
    write(STDOUT, buffer, len);

... ซึ่งเป็นรุ่นที่น้อยที่สุดของซีพี (1) ในที่นี้จะใช้อาร์เรย์บัฟเฟอร์เพื่อจัดเก็บข้อมูลที่อ่านโดยอ่าน (2)จนกว่าจะถูกเขียน จากนั้นบัฟเฟอร์จะถูกใช้ซ้ำ

มีโครงร่างบัฟเฟอร์ที่ซับซ้อนกว่าที่ใช้ตัวอย่างเช่นบัฟเฟอร์แบบวงกลมที่ใช้จำนวนบัฟเฟอร์ที่แน่นอนจำนวนหนึ่งหลังจากนั้นอีกหนึ่งครั้ง เมื่อบัฟเฟอร์เต็มแล้วดัชนี "ล้อมรอบ" เพื่อให้บัฟเฟอร์แรกถูกใช้ซ้ำ


12

บัฟเฟอร์หมายถึง 'ที่เก็บข้อมูลชั่วคราว' บัฟเฟอร์มีความสำคัญในการคำนวณเนื่องจากอุปกรณ์และระบบที่เชื่อมต่อระหว่างกันนั้นไม่ค่อยเชื่อมต่อกันดังนั้นเมื่อข้อมูลถูกส่งจากระบบหนึ่งไปยังอีกระบบหนึ่งจะต้องรอจนกว่าระบบผู้รับจะพร้อมใช้งาน


6

จริงๆแล้วมันจะขึ้นอยู่กับบริบทในแต่ละกรณีเนื่องจากไม่มีคำจำกัดความใด ๆ - แต่การพูดโดยทั่วไปแล้วบัฟเฟอร์เป็นสถานที่สำหรับเก็บสิ่งชั่วคราว การเปรียบเทียบโลกแห่งความจริงที่ดีที่สุดที่ฉันสามารถนึกได้ก็คือบริเวณรอ ตัวอย่างง่ายๆในการคำนวณคือเมื่อบัฟเฟอร์อ้างถึงส่วนหนึ่งของ RAM ที่ใช้สำหรับการจัดเก็บข้อมูลชั่วคราว


2

บัฟเฟอร์เป็นตัวยึดตำแหน่งชั่วคราว (ตัวแปรในภาษาการเขียนโปรแกรมจำนวนมาก) ในหน่วยความจำ (ram / ดิสก์) ซึ่งข้อมูลสามารถถูกทิ้งแล้วประมวลผลได้

มีข้อดีหลายประการของการบัฟเฟอร์เช่นเดียวกับที่อนุญาตให้สิ่งต่าง ๆ เกิดขึ้นพร้อมกันปรับปรุงประสิทธิภาพของ IO และอื่น ๆ

นอกจากนี้ยังมีข้อเสียมากมายหากไม่ได้ใช้อย่างถูกต้องเช่นบัฟเฟอร์ล้น, บัฟเฟอร์อันเดอร์โฟล์ ฯลฯ

C ตัวอย่างของบัฟเฟอร์ตัวอักษร

ถ่าน * buffer1 = calloc (5, sizeof (ถ่าน));

ถ่าน * buffer2 = calloc (15, sizeof (ถ่าน));


2

บัฟเฟอร์คือพื้นที่ข้อมูลที่ใช้ร่วมกันโดยอุปกรณ์ฮาร์ดแวร์หรือกระบวนการโปรแกรมที่ทำงานด้วยความเร็วที่แตกต่างกันหรือมีลำดับความสำคัญที่แตกต่างกัน บัฟเฟอร์ช่วยให้แต่ละอุปกรณ์หรือกระบวนการทำงานโดยไม่ต้องถูกควบคุมโดยอุปกรณ์อื่น เพื่อให้บัฟเฟอร์มีประสิทธิภาพขนาดของบัฟเฟอร์และอัลกอริทึมสำหรับการย้ายข้อมูลเข้าและออกจากบัฟเฟอร์

บัฟเฟอร์เป็น "จุดกึ่งกลางการถือครอง" แต่มีอยู่ไม่มากนักที่จะเร่งความเร็วของกิจกรรมเพื่อสนับสนุนการประสานงานของกิจกรรมที่แยกกัน

คำนี้ใช้ทั้งในการเขียนโปรแกรมและในฮาร์ดแวร์ ในการเขียนโปรแกรมการบัฟเฟอร์บางครั้งแสดงถึงความจำเป็นในการคัดกรองข้อมูลจากจุดประสงค์สุดท้ายเพื่อให้สามารถแก้ไขหรือประมวลผลก่อนที่จะย้ายไปยังไฟล์หรือฐานข้อมูลปกติ


1

บัฟเฟอร์เป็นตัวยึดตำแหน่งชั่วคราว (ตัวแปรในภาษาการเขียนโปรแกรมจำนวนมาก) ในหน่วยความจำ (ram / ดิสก์) ซึ่งข้อมูลสามารถถูกทิ้งแล้วประมวลผลได้

คำว่า "buffer" เป็นคำทั่วไปมากและไม่เฉพาะเจาะจงกับ IT หรือ CS เป็นสถานที่เก็บสิ่งชั่วคราวเพื่อลดความแตกต่างระหว่างความเร็วอินพุตและความเร็วเอาต์พุต ในขณะที่ผู้ผลิตนั้นเร็วกว่าผู้บริโภค แต่ผู้ผลิตสามารถเก็บเอาท์พุทในบัฟเฟอร์ต่อไปได้ เมื่อผู้ใช้บริการเร่งความเร็วก็สามารถอ่านได้จากบัฟเฟอร์ บัฟเฟอร์อยู่ตรงกลางเพื่อเชื่อมช่องว่าง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.