ممکن است بسیاری از کاربران واژه buffer را با Cache اشتباه بگیرند این درست که هر دو داده ها را برای مدتی موقت در خود نگهداری می کنند ولی در واقع این دو از هم جدا هستند. buffer به طور عمده برای تطابق سرعت انتقال بین فرستنده و گیرنده استفاده می شود از سوی دیگر، Cache سرعت دسترسی به داده هایی که اخیرا مورد استفاده قرار گرفته شده را بیشتر می کند چون آنها را کش کرده است. فقط اینها نیست، تفاوت های دیگری هم بین بافر و کش وجود دارد که در شکل زیر می توانید آنها را مشاهده کرده و ما در ادامه آنها را توضیح می دهیم.

Buffering یا بافرینگ چیست؟

همانطور که قبلا هم اشاره کردیم فرآیند بافرینگ نگهداری کردن داده ها در یک ناحیه از حافظه سیستم تا زمان انتقال آن به محل دیگر را بافرینگ می گوییم. این ناحیه از حافظه که در آن داده ها ذخیره می شود به عنوان بافر یا Buffer شناخته می شود. بافرینگ زمانی استفاده می شود که سرعت ارسال و دریافت در مبدا و مقصد با هم برابر نیستند و در نهایت ممکن است این وسط Bottleneck به وجود بیاید به این معنی که اطلاعات با سرعت زیاد ارسال شوند و چون سرعت دریافت و پردازش پایین است دچار مشکل شوند.

فرآیند بافرینگ هم می تواند بصورت سخت افزاری و هم می تواند بصورت نرم افزاری پیاده سازی شود ، بیشتر بافرهایی که امروزه مورد استفاده قرار می گیرند بافرهای نرم افزاری هستند. بافرینگ بصورت گسترده ای امروزه در پرینترها مورد استفاده قرار می گیرد و به ویژه در فرآیند Printer Spooling بافر نقش تاثیر گذاری دارد ، از طرفی برخی از سیستم های ویدیو آنلاین یا سرویس های Video Streaming نیز از بافرینگ بصورت گسترده ای استفاده می کنند.

دقت کرده اید که هرگاه از وایبر ویدیویی را نگاه می کنید اگر سرعت شما کمتر از سرور باشد در کنار آن Buffering نوشته می شود. بیشتر اوقات بافرینگ به این شکل انجام می شود که داده های ما در یک صف یا queue با یک سرعت معین نوشته و نگهداری می شوند و از طریق یک صف یا queue دیگر با سرعت متفاوتی خوانده می شوند . بنابراین تا اینجا متوجه شدید که دوست عزیزی که عنوان کردند بافر پرینتر مشکل دارد درست گفته است و پرینتر حافظه Cache ندارد.

Caching یا کشینگ چیست؟

فرآیند Caching یا کشینگ به ذخیره کردن داده ها در یک قسمت جداگانه به نام Cache در سیستم گفته می شود تا در صورت نیاز به دسترسی به داده های مورد نظر در آینده سرعت دستیابی به این داده ها زیادتر از حالت عادی باشد. زمانیکه یک داده درخواست داده می شود قبل از اینکه حافظه RAM و یا هارد دیسک جستجو شود ، محتویات Cache سیستم بازرسی می شود ، در صورتیکه داده مورد نظر در Cache سیستم وجود داشته باشد سرعت دسترسی به آن بسیار بالا خواهد بود.

اگر داده درخواستی در Cache وجود داشته باشد در اصطلاح فنی به آن Cache Hit گفته می شود. بدون شک با تفاسیری که گفتیم زمانیکه داده ای از Cache سیستم خوانده می شود سرعت خواندن آن بسیار بالاتر از محل اصلی است که داده در آن ذخیره شده است ، اگر داده درخواستی در Cache وجود نداشت در اصطلاح فنی یک Cache Miss اتفاق افتاده است. در چنین حالتی داده بایستی از محل اصلی ذخیره سازی آن درخواست داده شود که ای فرآیند طبیعتا زمان بیشتری را می طلبد.

فرآیند Caching در محل های متنوعی انجام می شود ، در CPU با استفاده از فرآیند Caching شما تا حدود زیادی سرعت دسترسی به اطلاعات را بالا می برید زیرا سیستم به جای استفاده از حافظه RAM از حافظه Cache استفاده می کند ، دقت کنید که حافظه Cache در سیستم ها معمولا بین CPU و حافظه RAM قرار می گیرد و به همین دلیل سرعت دسترسی به آن توسط CPU از سرعت دسترسی به RAM بالاتر است. اما این تنها جایی نیست که در آن فرآیند Caching مورد استفاده قرار می گیرد.

شما وقتی به یک وب سایت سر می زنید محتویات موجود در آن ممکن است در سیستم شما Cache شود و در مرحله بعدی بازدید از وب سایت سرعت باز شدن صفحات شما که قبلا در سیستم شما ذخیره شده اند بسیار بالاتر خواهد رفت. با توجه به اینکه ساختار اصلی انجمن تخصصی فناوری اطلاعات ایران بر اساس شبکه و زیرساخت بنا شده است بد نیست مثال شبکه ای از این جریان هم داشته باشیم .

امروزه در شبکه های بزرگ برای صرفه جویی در مصرف اینترنت در شبکه از یک Cache Server استفاده می شود تا صفحات اینترنتی را در خود Cache کند و در صورت درخواست کاربران صفحه Cache شده را به کاربر نمایش دهد ، از Cache Server های معروف دنیا که به امید خدا در آینده ای نه چندان دور در خصوص پیاده سازی آنها صحبت خواهیم کرد می توانیم به Squid Cache Server اشاره کنیم که یک Cache Server لینوکسی است.

فرق کش Cache و بافر Buffer

بر طبق توضیحات بالا به این نتیجه میرسیم که کش برای افزایش سرعت استفاده می شود اما بافر برای هماهنگی سرعت . کش برای تلف نشدن وقت پردازنده برای پیدا کردن اطلاعات تکراری در رم است ولی بافر برای هماهنگ کردن سرعت دو قظعه که از لحاظ سرعت با هم متفاوت اند استفاده می شود . اگر دقت کرده باشید موقع دیدن فیلم از یوتیوب یا سایتهای مشابه کلمه Buffering را Player شما می نویسد به این معنی است که سرعت سرور از سرعت اینترنت شما بیشتر است و اطلاعات را در حافظه بافر ذخیره می کند تا در زمان مناسب تری به نمایش درارد . شباهت بین کش و بافر این است که هر دو حافظه های فرار هستن که با قطع جریان برق پاک می شوند.

Buffers ها در 3 ظرفیت اجرا می شوند که با هم بدانها نگاهی می اندازیم:

  • Zero Capacity

در اینجا حداکثر اندازه حافظه بافر صفر است و نمی تواند هیچ اطلاعاتی داشته باشد، بنابراین فرستنده باید مسدود شود تا گیرنده اطلاعات را دریافت کند.

  • Bounded Capacity

در اینجا حجم حافظه بافر محدود است. فرستنده می تواند N بلوک داده ارسال کند. اگر حافظه بافر پر شود، فرستنده مسدود می شود تا فضای موجود در حافظه قابل دسترس و available شود.

  • Unbounded Capacity

در اینجا حافظه بافر به طور بالقوه بی نهایت است. هر تعداد بلوک داده می تواند ارسال شود و فرستنده هرگز مسدود نخواهد شد.

جمع بندی

Buffer و Cache، هر دو داده ها را بصورت موقت ذخیره می کنند.

اما هر دو برای اهداف متفاوتی مورد استفاده قرار می گیرند.

Buffer عمدتا برای تطبیق دادن بین سرعت ارسال کننده و دریافت کننده مورد استفاده است و در مقابل Cache حافظه ای است که با ذخیره سازی داده ها در خود، سرعت دسترسی بدان ها را برای دفعات بعد بیشتر می کند و همین امر موجب افزایش کارایی و Performance خواهد شد.

امیدواریم مقاله مقایسه تفاوت های بین حافظه کش و بافر مفید بوده باشد.