مرجع شماری

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو
Translation arrow fa.svg این نوشتار یک ترجمه از ویکی‌پدیاهای دیگر است. پيوند به سایر زبان‌ها را در سمت راست-پايين اين صفحه ببينيد.

مرجع شماری[ویرایش]

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

استفاده در زباله روبی[ویرایش]

مرجع شماری، به عنوان یک الگوریتم زباله روبی، تعداد مرجع هایی که یک شی برای اشیای دیگر نگهداری می کند را پیگیری می کند. اگر شماره مرجع یک شی صفر شود، آنگاه آن شی غیر قابل دسترس شده و نابود می شود. هنگامی که یک شئ نابود می شود، شماره مرجع هر شئ که منبع شئ نابود شده باشد، کاهش می یابد. به همین دلیل حذف کردن یک منبع، می تواند به صورت پنهانی به آزاد شدن تعداد زیادی شئ منجر شود. یک تغییر رایج به مرجع شماری اجازه می دهد تا به صورت افزایشی عمل کند، به جای آنکه یک شئ را در زمانی که شماره مرجع آن صفر می شود، نابود کند یعنی در این حالت این شئ به لیست اشیاء بدون مرجع اضافه می شود و در زمان خاصی یک یا بیش از یک شئ از این لیست نابود می شود. شماره های مرجع ساده نیازمند به روز رسانی متداول هستند. هر زمان که یک مرجع نابود شده و یا جایگزین می شود شماره مرجع آن شئ کم می شود، و همچنین در هر زمانی که یک مرجع ایجاد شده و یا کپی می شود شماره مرجع آن شئ زیاد می شود. همچنین مرجع شماری در سیستم های عامل و سیستم های توزیع شده، هر جا که دنبال کردن زباله روبی غیر افزایشی کامل، به دلیل اندازه گراف شئ و سرعت دستیابی پایین بسیار زمان بر باشد، استفاده می شود.

محاسن و معایب[ویرایش]

مزیت اصلی مرجع شماری بر روش دنبال کردن زباله روبی، این است که اشیاء در زمانی که دیگر قابل مرجع شدن نیستند و در حالت افزایشی بدون توقف های طولانی برای دوره های جمع آوری و با زمان تعریف شده کاملاً مشخص برای طول عمر هر شئ، اصلاح می شوند. در کاربردهای بلا درنگ و در سیستم هایی با حافظه محدود، حساسیت مهم است. مرجع شماری همچنین در میان ساده ترین فرم های زباله روبی از لحاظ اجرا شدن است. همچنین اجازه مدیریت موثر منابع بدون حافظه مانند اشیاء عملگر سیستم، که معمولاً از حافظه کمیاب تر هستند، را می دهد(سیستم های دنبال گر GC، از تمام کننده ها برای این امر استفاده می کنند ولی این اصلاح با تاخیر ممکن است مشکلاتی را ایجاد کند). شمارش مرجع وزن دار یک راه حل خوب برای زباله روبی در یک سیستم گسترده است. دوره های زباله روبی دنبال کننده در صورتی راه اندازی می شوند که یک مجموعه از اشیاء زنده بیشتر حافظه قابل دسترس را پر کنند، این امر نیازمند حافظه اضافی است تا موثر واقع شود. عملکرد مرجع شماری در صورت کاهش کل فضای آزاد، بدتر نمی‌شود. مرجع شماری در حالت ساده 2 اشکال اصلی نسبت به زباله روبی دنبال کننده دارد، که هر کدام نیازمند مکانیزم های اضافی برای بهبودشان هستند:

  • به روز رسانی های متداول، یک منبع نا کارآمدی هستند.
  • الگوریتم ساده ی مورد استفاده در مرجع شماری، قابلیت کنترل دوره های مرجع را ندارد.

تفسیر نموداری (گرافی)[ویرایش]

به هنگام سر و کار داشتن با برنامه های زباله روبی، مفید است که درباره گراف مرجع بیندیشیم که یک گراف جهتداری است که رئوس آن اشیاء هستند و یک یال از شئ A به شئ B وجود دارد اگر A مرجعی از B را نگه دارد. همچنین ما یک راس یا رئوس خاصی داریم که نشان دهنده متغیر های محلی و مراجع محلی هستند که به وسیله سیستم زمان اجرا نگه داری می شوند و هیچ گاه هیچ یالی به این گره ها نمی‌روند، هر چند یال ها می توانند به وسیله آنها به گره های دیگر بروند.

مثال هایی از کاربرد این الگوریتم[ویرایش]

  • Cocoa

چار چوب Cocoa در Apple از مرجع شماری دستی که بسیار شبیه COM است استفاده می کنند. هر چند در Mac OS v10.5، Cocoa زباله روبی اتوماتیک دارد.

  • 'PHP

PHP از یک مکانیزم مرجع شماری برای مدیریت متغیر داخلی اش استفاده می کند. PHP به شما این اجازه را می دهد که به وسیله عملگرهای کاربر دوره جمع آوری را روشن و خاموش نماید. همچنین به شما این اجازه را می دهد تا به صورت دستی مکانیزم پاکسازی را اجرا کنید.

  • Python

Python نیز همچنین از مرجع شماری استفاده می کند و امکان ردیابی دوره را می دهد.

منابع[ویرایش]

  • ویکی‌پدیای انگلیسی. //en.wikipedia.org/wiki/Reference_counting