ورود

View Full Version : سوال: کش کردن یعنی چی؟



Sina.iRoid
یک شنبه 24 اسفند 1393, 13:03 عصر
سلام. میشه در مورد کش کردن توضیح بدین. مثلا در مبحث تردها میگن برای جلوگیری از کش کردن یه متغیری و به صورت Volatile تعریف می کنند. ممنون.

cups_of_java
یک شنبه 24 اسفند 1393, 20:21 عصر
کش کردن به طور عامیانه یعنی اینکه شما یه چیزی رو یه جا دم دستت نگه داری تا بتونی سریع تر در اختیار دیگران قرارش بدی....
اگه شما پروندتون توی یه سازمان در گردش باشه... اون رو از بایگانی در میارن و تا یک هفته بر نمیگردن به بایگانی تا هر سری که نیاز میشه دم دست باشه و زمان زیادی طول نکشه تا هی درش بیارن و دوبازه بزارنش توی بانگانی هر دفعه...
هر ترد هم برای خودش یه حافظه و دسترسی هایی داره که فقط خودش میبینه. و این با اون حافظه برنامه شما فرق داره... چون اگه بخواد هر ترد در هر چرخه اجرا به حافظه اصلی (Memory یا RAM) سیستم دسترسی باشه خیلی کند خواهد بود اجرای برنامه بنابراین هر ترد یک فضای کوچیک و محدود به خودش رو توی پردازنده داره که اصطلاحن کش میگن. شما وقتی یک متغیر تعریف میکنید توی برنامه اون متغیر توی حافظه اصلی نگهداری میشه اما هر تردی هم برای خودش یه کپی ازش توی کش اش داره و اینجاست که همزمانی ترد ها می تونه دردسر هایی رو در دست زدن جند ترد موازی به یک متغیر ایجاد کنه... چون وفتی ترد مینویسه مقدار متغیر رو در واقع اول کش خودش رو به روز میکنه و بعد از اون حافظه اصلی به روز میشه....
واسه اینکه این عملیات اتومیک و هرچه ممکنه تک مرحله ای بشه از volatile میشه استفاده کرد...