Redis بایگانی - تاد

شرایط رقابتی و قفل بین‌پروسه‌ای در PHP

توسط | مقالات فنی | نظری داده نشده.

[این مقاله در سطح «پیشرفته» و نیازمند آشنایی خواننده با زبان PHP و نرم‌افزار Redis و مفاهیم «شرایط رقابتی» و «Shared Object» است.]

کنترل دسترسی چند پروسه به منابع مشترک یا shared object ها از مسائلی است که روزانه در زندگی واقعی برنامه‌نویسان رخ می‌دهد. مدیریت این گونه از مسائل اهمیت بسیار زیادی در پیاده‌سازی نرم‌افزارها و سرویس‌های توزیع‌شده دارد. پیامد مدیریت نادرست این مسأله منجر به ایجاد شرایط رقابتی و بروز باگ‌های غیرقابل پیگیری در برنامه می‌شود. آشفته‌بازار شرایط رقابتی چیزی شبیه به رقابت سنتی بو-تااوشی در ژاپن است در آن هر فرد از تیم رقیب، به هر طریق و وسیله‌ای، موظف است دکل میانه‌ی میدان را به زیر بکشد.

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

متأسفانه زبان PHP ذاتاً دارای سازوکاری برای استفاده از راه حل‌های معمول و منطقی امروزی، مانند semaphore و mutex، را ندارد. اما این به آن معنی نیست که چنین کاری در PHP امکان‌پذیر نباشد. در ادامه‌ی این مقاله سعی شده است تا چند نمونه از راهکارهای موجود در PHP برای پرهیز از شرایط رقابتی و مزایا و معایب آنها ارائه شود.

Read More

می‌خواهید از آخرین اخبار تاد مطلع باشید؟ ما را در تلگرام دنبال کنید