aech
کانکارنسی فقط «همزمان اجرا شدن» نیست.
خیلیها فکر میکنند اگر دو عملیات همزمان اجرا شوند، با مسئلهی Concurrency روبهرو هستیم. اما اگر این دو عملیات هیچ ارتباطی با هم نداشته باشند، در واقع مشکلی وجود ندارد.
برای مثال:
یک سرویس در حال فشردهسازی تصویر است.
سرویس دیگری در حال پردازش ویدئو است.
این دو ممکن است کانکارنت اجرا شوند، اما چون روی دادهی مشترکی کار نمیکنند، نیازی به هماهنگی خاصی ندارند.
مشکل واقعی زمانی شروع میشود که چند عملیات به یک دادهی مشترک و قابل تغییر (Shared Mutable State) دسترسی داشته باشند.
فرض کنید دو تراکنش همزمان روی موجودی یک حساب بانکی کار میکنند:
تراکنش اول: 50 واحد از موجودی کم میکند.
تراکنش دوم: 100 واحد به موجودی اضافه میکند.
در اینجا دیگر فقط «همزمان بودن» مهم نیست؛ بلکه ترتیب اجرا و نحوهی تعامل این دو عملیات میتواند نتیجهی نهایی را تغییر دهد. اگر این تعامل بهدرستی مدیریت نشود، ممکن است دادهها ناسازگار شوند یا حتی تغییرات یکی از تراکنشها از بین برود.
به همین دلیل، Concurrency را میتوان اینگونه تعریف کرد:
کانکارنسی یعنی مدیریت صحیح دسترسی همزمان چند عملیات به یک وضعیت (State) مشترک، بهگونهای که مستقل از ترتیب اجرای آنها، نتیجه همچنان صحیح باقی بماند.
به همین خاطر است که مفاهیمی مانند Isolation ، Locking ، MVCC و Serializability در سیستمهای پایگاه داده به وجود آمدهاند؛ هدف همهی آنها یک چیز است: حفظ صحت دادهها، حتی زمانی که چند عملیات به طور همزمان در حال اجرا هستند.
#programming #system_design
@Syntax_fa
12 · 1.5K ·