Önbellek ile arabellek arasındaki fark nedir?


Yanıtlar:


12

Wikipedia'nın veri arabellekleri hakkındaki yazısından :

bir ara bellek, bir yerden başka bir yere taşınırken verileri geçici olarak tutmak için kullanılan fiziksel bellek deposunun bir bölgesidir

Bir arabellek , bir depolama konumundan diğerine aktarılan her bir veri parçasında (ses işlemede dairesel bir arabellek kullanıldığında olduğu gibi) dolaşır ve onu tutar. Bir arabellek buna izin verir - veri akışındaki mevcut konumunuzdan önce ve sonra bir "arabellek".

Gerçekten de, bir tamponun ve bir önbelleğin bazı ortak yönleri vardır. Ancak, geleneksel anlamda önbellek genelde gelmez değil o yerden bir yere taşınırken ne zaman verilerin tümünü saklamak (yani işlemci önbellek).

Önbelleğin amacı, verileri saydam bir şekilde saklamaktır, böylece kalan veriler herhangi bir performans cezası olmadan aktarılabilecek kadar yeterli veri önbelleğe alınır. Bu bağlamda, önbellek yalnızca az miktarda veri "aktarır" (aktarım hızlarına, önbellek boyutlarına, vb. Bağlı olarak).

Temel fark, bir ara belleğin sonunda tüm verileri tutmasıdır. Bunun tersine, bir önbellek (tasarıma bağlı olarak) verilerin tümünü, bazılarını veya hiçbirini tutmamış olabilir. Ancak, önbelleğe, verilere ilk etapta doğrudan erişiyormuşsunuz gibi erişilir - tam olarak önbelleğe alınan şey önbelleğin "kullanıcısı" için saydamdır.


Aradaki fark arayüzdedir . Bir veri kaynağına erişmek için bir önbellek kullandığınız zaman, önbellek sanki kullanmak olduğunu sen önbellek aracılığıyla veri kaynağının her parçası erişebilir ve veri (nereden geldiğini önbellek belirleyecektir - veri kaynağı önbellek veya kaynak). Önbellek, verilerin hangi bölümlerinin önyükleneceğini belirler (genellikle yalnızca başlangıç, ancak bazen tümü), kullanılan önbellek değiştirme algoritması , şeylerin önbellekten ne zaman / ne zaman kaldırılacağını belirler. Bunun en iyi örneği bir yana, bir sistemdir önbellek CPU kendisi olduğunu Prefetcher / önceden okuma. Her ikisi de en çok kullanacağınızı düşündükleri veri bölümlerini belleğe yükler ve bir şey önbelleğe alınmazsa sabit sürücüye geri döner.

Bunun tersine, yeni kısım arabelleğe taşınmamışsa, konumunuzu veri akışındaki anında taşımak için bir tampon kullanılamaz. Bunu yapmak için, tamponun yeni bir konumdan "yeniden başlatmanızı" etkin bir şekilde gerektiren yeni konumun tampon uzunluğunu aşması gerekir. Bunun en iyi örneği kaydırıcıyı bir Youtube videosunda taşımaktır.

Bir arabellek için iyi bir örnek, Winamp'ta ses çalmaktır. Ses dosyalarının CPU tarafından deşifre edilmesi gerektiğinden, şarkının okunması ile sesin işlenmesi ile ses kartınıza gönderilmesi arasında biraz zaman geçmesi gerekir. Winamp ses verilerinin bir kısmını tamponlayacaktır, böylece herhangi bir "kilitlenmeden" kaçınmak için zaten işlenmiş yeterli ses verisi vardır (yani CPU her zaman birkaç yüz milisaniyede duyacağınız sesi hazırlar, asla gerçek zamanlı değildir duyduğunuz şey, geçmişte CPU'nun hazırladığı tampondan gelir).


Youtube örneğinizde, video tamamen arabelleğe alınmışsa, yani cihazınıza indirilmişse, yalnızca önbelleğe alınmış olduğunu ve sayfayı yenilemediğiniz veya video. Bu doğru olur mu?
PeanutsMonkey

@PeanutsMonkey doğru, Youtube videosu arabelleğe alınırken doğrudan tarayıcınızın önbelleğine indirilir. Bu durumda arabellek, yüksek kaliteli bir terimdir, çünkü her zaman önbellekte bulunanları her zaman görüntülersiniz. Video arabelleğe alındıkça önbelleğe taşınır (aynı fiziksel konumu paylaşırlar). Cevabı, ses çalarlar bağlamında başka bir tampon örneğiyle güncelledim.
Atılım

2
tl; dr sürümü: Verileri olabildiğince çabuk elde etmek istiyorsanız, bu bir arabellektir. Verileri olabildiğince uzun süre saklamak istiyorsanız, bu bir önbellektir.
David Schwartz

10

Bir önbelleğin, aynı verilerin birden çok kullanımını ima eden bir tamponun belirli bir kullanım modeli olduğunu söylemek daha doğru olur. "Arabellek" in çoğu kullanımı, verilerin tek bir kullanımdan sonra boşaltılacağını veya atılacağını belirtir (bu mutlaka böyle olmasa da), oysa “önbellek” verilerin birden çok kez yeniden kullanılacağını ima eder. Önbellekleme genellikle verilerin eşzamanlı olarak kullanıldığı gibi saklandığını ima eder, ancak bu mutlaka böyle değildir (ön getirme ve benzerlerinde olduğu gibi), tamponlama ise verilerin daha sonra kullanılmak üzere saklandığını gösterir.

Bununla birlikte, hem uygulamada hem de kullanımda kesinlikle büyük bir çakışma vardır.


3

Önbellek ve arabellek arasındaki önemli bir fark:

Tampon, birincil belleğin bir parçasıdır. Bunlar birincil bellekten (RAM) var olan ve erişilen yapılardır.

Öte yandan, önbellek bir bilgisayarın bellek hiyerarşisinde ayrı bir fiziksel bellektir.

Arabellek bazen - Tampon önbellek olarak da adlandırılır. Bu ad, arabellek kullanımının önbellekle benzer olması, yani veri depolaması üzerinde durur. fark ise kullanımı bağlamında yatmaktadır.

Tamponlar, verileri bir nesneden diğerine taşırken geçici olarak veri depolamak için kullanılır. Örn: bir video İnternetten PC'ye taşındığında, ekran tamponları videonun daha sonra görüntülenecek olan karelerini saklamak için kullanılır. (VİDEO BAŞARILI BİR TAMPON SÜRECİNDEN SONRASI ÇALIŞMAK GİBİ, QoS'U ARTIRIR.) EX: Dosyalarımıza veri yazdığımızda başka bir örnek senaryodur. Yeni yazılan veriler anında ikincil belleğe kopyalanmaz. Yapılan değişiklikler arabellekte saklanır ve sonra tasarlanan ilkeye göre, değişiklikler ikincil bellekteki (sabit disk) dosyaya geri yansıtılır.

Öte yandan, RAM ve işlemcinin yürütme hızı arasındaki boşluğu kapatmak için birincil bellek ve işlemciler arasında önbellekler kullanılır. Ayrıca, en sık erişilen veriler RAM erişimini azaltmak için önbellekte saklanır.


-1 yazarsınız "önbellek ayrı bir fiziksel bellektir" <--- Hayır. IE önbellek HDD'de depolar ve şüphesiz RAM'e yükler stackoverflow.com/questions/854412/… C kodunun önbellek olarak bilinen fiziksel belleğe yüklemek için belirleyebileceğini sanmıyorum. Bu önbelleğe konulan şey daha düşük seviyeli bir şeydir, belki sadece işletim sistemi belirtebilir. Ancak RAM'de olmasına rağmen hala önbellek olarak adlandırılır. Ve web sunucusu kalamar bir önbellek kurabilir, bunun fiziksel önbellekte olduğunu veya olması gerektiğini düşünmek için bir neden yok.
barlop

önbellekleme bir işlevdir, özel bellekte olması gerekmez
barlop

1

Ortak şey: her ikisi de hesaplama ve "ana" depolama arasındaki ara veri depolama bileşenleridir (yazılım veya donanım).

Benim için fark şu:

Tampon:

  • Verilere ardışık erişimi yönetir (örn. Dosya veya soketten veri okuma / yazma)
  • Hesaplama ve ana depolama arasındaki arabirimi etkinleştirir , veri üreticisinin ve veri tüketicisinin farklı veri aktarım modellerini birbirine uyarlar . Örneğin, hesaplama küçük veri parçaları yazar, ancak disk sürücüsü yalnızca belirli bir boyuttaki veri parçalarını kabul edebilir. Böylece arabellek girdi olarak küçük parçalar biriktirir ve bunları daha büyük çıktı parçaları halinde yeniden gruplandırır.
  • Yani bir Adaptör tasarım deseni gibidir. Doğrudan birlikte çalışamayan etkileşen iki bileşeni birleştirir.
  • Örnekler: disk arabelleği, Java dilinde BufferedReader, bilgisayar grafiklerinde duffering.

Önbellek:

  • Kolları rasgele verilere erişim (sigara gerekli sekans bulunan bu Mememory örneğin CPU önbellek önbelleğe çizgiler).
  • Ana depolamaya erişimi optimize eder, daha hızlı hale getirir. CPU önbelleği belleğe erişimi engeller, böylece CPU komutlarını daha hızlı hale getirir.
  • Bir Dekoratör tasarım deseni gibidir. Prensipte doğrudan birlikte çalışabilen iki etkileşen bileşene (genellikle şeffaf bir şekilde) katılır, ancak etkileşimi daha hızlı hale getirir.
  • Örnekler: CPU önbellek, sayfa önbellek, web proxy, tarayıcı önbellek.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.