Apa perbedaan antara cache dan buffer?

12

Apakah mengatakan cache adalah jenis buffer khusus yang benar? Keduanya melakukan fungsi yang sama, tetapi apakah ada beberapa perbedaan mendasar yang saya lewatkan?

Dharini Chandrasekaran
sumber
stackoverflow.com/questions/6345020/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

11

Dari artikel Wikipedia tentang buffer data :

buffer adalah wilayah penyimpanan memori fisik yang digunakan untuk menyimpan sementara data saat sedang dipindahkan dari satu tempat ke tempat lain

Sebuah penyangga ujung up bersepeda melalui dan memegang setiap bagian dari data yang ditransmisikan dari satu lokasi penyimpanan yang lain (seperti ketika menggunakan penyangga melingkar dalam pengolahan audio). Buffer memungkinkan hanya itu - "buffer" data sebelum dan sesudah posisi Anda saat ini dalam aliran data.

Memang, ada beberapa aspek umum dari buffer dan cache. Namun, cache dalam pengertian konvensional biasanya tidak menyimpan semua data ketika dipindahkan dari satu tempat ke tempat lain (yaitu cache CPU).

Tujuan dari cache adalah untuk menyimpan data secara transparan, sehingga hanya cukup data yang di-cache sehingga data yang tersisa dapat ditransfer tanpa penalti kinerja. Dalam konteks ini, cache hanya "mengambil di awal" sejumlah kecil data (tergantung pada kecepatan transfer, ukuran cache, dll ...).

Perbedaan utama adalah bahwa buffer pada akhirnya akan menyimpan semua data. Sebaliknya, cache mungkin menyimpan semua, sebagian, atau tidak ada data (tergantung pada desain). Namun, cache diakses seolah-olah Anda langsung mengakses data di tempat pertama - apa yang sebenarnya di-cache adalah transparan untuk "pengguna" cache.


Perbedaannya ada pada antarmuka . Saat Anda menggunakan cache untuk mengakses sumber data, Anda menggunakannya seolah-olah cache adalah sumber data - Anda dapat mengakses setiap bagian dari sumber data melalui cache, dan cache akan menentukan dari mana data berasal ( cache itu sendiri, atau sumbernya). Cache itu sendiri menentukan bagian mana dari data yang akan dimuat sebelumnya (biasanya hanya permulaan, tetapi kadang-kadang semua), sedangkan algoritma penggantian cache yang digunakan menentukan apa / kapan hal-hal dihapus dari cache. Contoh terbaik dari ini adalah sistem, selain dari cache CPU itu sendiri, adalah prefetcher / readahead. Keduanya memuat bagian data yang mereka pikir akan Anda gunakan paling banyak ke dalam memori, dan kembali ke hard drive jika ada sesuatu yang tidak di-cache.

Sebaliknya, buffer tidak dapat digunakan untuk memindahkan lokasi Anda secara instan dalam aliran data, kecuali jika bagian yang baru telah dipindahkan ke buffer. Untuk melakukannya akan membutuhkan buffer untuk pindah (mengingat lokasi baru melebihi panjang buffer), secara efektif mengharuskan Anda untuk "me-restart" buffer dari lokasi baru. Contoh terbaik dari ini adalah memindahkan slider di video Youtube.

Contoh bagus lain dari buffer adalah memutar audio di Winamp. Karena file audio perlu diterjemahkan oleh CPU, dibutuhkan beberapa saat antara saat lagu dibaca, hingga saat audio diproses, hingga ketika dikirim ke kartu suara Anda. Winamp akan buffer beberapa data audio, sehingga ada cukup data audio yang sudah diproses untuk menghindari "penguncian" (yaitu CPU selalu menyiapkan audio yang akan Anda dengar dalam beberapa ratus milidetik, tidak pernah real-time) ; apa yang Anda dengar berasal dari buffer, yang merupakan apa yang disiapkan CPU di masa lalu).

Penerobosan
sumber
Saya menganggap itu dalam contoh Youtube Anda jika video telah sepenuhnya disangga yaitu diunduh ke perangkat Anda, itu hanya di-cache dan Anda tidak perlu mencari lokasi baru setiap kali Anda memindahkan slide kecuali Anda me-refresh halaman atau memuat ulang video. Apakah itu benar?
PeanutsMonkey
@PeanutsMonkey benar, video Youtube diunduh langsung ke cache peramban Anda karena sedang disangga. Buffer dalam hal ini hanyalah istilah tingkat tinggi, karena Anda selalu melihat apa yang saat ini duduk di cache. Saat video buffer, dipindahkan ke cache (mereka berbagi lokasi fisik yang sama). Saya memperbarui jawabannya dengan contoh buffer lain, dalam konteks pemutar audio.
Terobosan
2
tl; dr version: Jika Anda ingin mendapatkan data secepat mungkin, itu adalah buffer. Jika Anda ingin menyimpan data di dalamnya selama mungkin, ini adalah cache.
David Schwartz
10

Akan lebih akurat untuk mengatakan bahwa cache adalah pola penggunaan tertentu dari buffer, yang menyiratkan beberapa penggunaan data yang sama. Sebagian besar penggunaan "buffer" menyiratkan bahwa data akan dikeringkan atau dibuang setelah penggunaan tunggal (meskipun ini belum tentu demikian), sedangkan "cache" menyiratkan bahwa data akan digunakan kembali beberapa kali. Caching juga sering menyiratkan bahwa data disimpan karena juga digunakan secara bersamaan, meskipun hal ini belum tentu demikian (seperti dalam pra-pengambilan dan sejenisnya), sedangkan buffering menyiratkan bahwa data sedang disimpan untuk digunakan nanti.

Namun tentu saja ada tumpang tindih besar dalam implementasi dan penggunaan.

halus
sumber
3

Satu perbedaan penting antara cache dan buffer adalah:

Buffer adalah bagian dari memori utama. Mereka adalah struktur yang ada dan diakses dari memori primer (RAM).

Di sisi lain, cache adalah memori fisik yang terpisah dalam hierarki memori komputer.

Buffer juga kadang disebut sebagai - Buffer cache. Nama ini menekankan pada fakta bahwa penggunaan buffer mirip dengan cache, yaitu untuk menyimpan data. sedangkan perbedaannya terletak pada konteks penggunaannya.

Buffer digunakan untuk menyimpan data sementara, sementara data dipindahkan dari satu objek ke objek lainnya. EX: ketika video dipindahkan dari Internet ke PC kami untuk tampilan buffer digunakan untuk menyimpan frame video yang akan ditampilkan berikutnya. (INI MENINGKATKAN QoS, SEBAGAI VIDEO AKAN MENJALANKAN DENGAN BAIK SETELAH PROSES PENGHASIL YANG BERHASIL.) EX: contoh lain adalah skenario ketika kita menulis data ke file kita. Data yang baru ditulis tidak disalin ke memori sekunder secara instan. Perubahan yang dibuat disimpan dalam buffer dan kemudian sesuai dengan kebijakan yang dirancang, perubahan tersebut dipantulkan kembali ke file di memori sekunder (hard disk).

Cache di sisi lain digunakan antara memori utama dan prosesor, untuk menjembatani kesenjangan antara kecepatan eksekusi RAM dan prosesor. Juga data yang paling sering diakses disimpan dalam cache untuk mengurangi akses ke RAM.

Rubal
sumber
-1 Anda menulis "cache adalah memori fisik yang terpisah" <--- Tidak. Tidak harus. IE menyimpan cache pada HDD dan tidak diragukan lagi memuatnya ke dalam RAM stackoverflow.com/questions/854412/... Saya tidak berpikir kode C dapat menentukan untuk memuatnya ke memori fisik yang dikenal sebagai cache. Apa yang dimasukkan ke dalam cache itu lebih merupakan hal tingkat rendah, mungkin hanya OS yang dapat menentukan. Tapi itu masih disebut cache meskipun itu dalam RAM. Dan server web cumi-cumi dapat mengatur cache, tidak ada alasan untuk berpikir itu semua dalam memori cache fisik atau perlu.
barlop
caching adalah fungsi, itu tidak harus di memori khusus
barlop
1

Hal yang umum: keduanya adalah komponen penyimpanan data perantara (perangkat lunak atau perangkat keras) antara komputasi dan penyimpanan "utama".

Bagi saya perbedaannya adalah sebagai berikut:

Penyangga:

  • Menangani akses berurutan ke data (mis. Membaca / menulis data dari file atau soket)
  • Memungkinkan antarmuka antara komputasi dan penyimpanan utama, saling beradaptasi satu sama lain dengan pola transfer data yang berbeda dari produsen data dan konsumen data. Misalnya perhitungan menulis potongan kecil data, tetapi disk drive hanya dapat menerima potongan data dari ukuran tertentu. Jadi buffer mengumpulkan potongan-potongan kecil sebagai input dan mengelompokkannya menjadi bagian-bagian yang lebih besar dari output.
  • Jadi itu seperti pola desain Adaptor . Ini bergabung dengan dua komponen yang berinteraksi yang tidak dapat beroperasi secara langsung.
  • Contoh: buffer disk, BufferedReader dalam bahasa Java, duffering dalam grafik komputer.

Cache:

  • Menangani akses acak ke data (mis. Cache CPU cache baris memori yang terletak tidak perlu secara berurutan).
  • Mengoptimalkan akses ke penyimpanan utama, membuatnya lebih cepat. Misalnya cache CPU menghindari akses ke memori sehingga membuat perintah CPU lebih cepat.
  • Ini seperti pola desain dekorator . Ia bergabung (seringkali secara transparan) dua komponen yang saling berinteraksi yang pada prinsipnya dapat berinteraksi secara langsung, tetapi itu membuat interaksi lebih cepat.
  • Contoh: cache CPU, cache halaman, proksi web, cache browser.
Alexey
sumber