Concurrency یا همزمانی در انتیتی فریم ورک چیست ؟
سلام دوستان لطفا راهنمایی کنید مفهوم Concurrency یا همزمانی در انتیتی فریم ورک چیست ؟ کاربرد Concurrency رو هم بگید. ممنون
آشنایی با مفهوم همزمانی یا Concurrency در برنامه نویسی
اول بهتره یه تعریف خیلی مختصر و مفیدی از واژه همزمانی یا Concurrency داشته باشیم. "همزمانی به انجام چند کار در یک زمان گفته می شود." از تعریف همزمانی مشخصه که زمان هایی نیاز هست چندین کار همزمان انجام بشه. مثلا ثبت چند رکورد از چند user مختلف در دیتابیس و همچنین پاسخ سرور به چندین request از چندین کاربر مختلف.
وقتی برنامه شما به صورت همزمان نوشته شده باشه وقتی کاربر اول request صادر میکنه سرور مشغول پاسخ دهی به درخواست کاربر میشه. اگر در همین زمان کاربر دوم یا حتی سوم و ... هم request هایی رو صادر کنن، سرور بخشی از توان و منابعش رو برای پاسخ به کاربران بعدی صرف می کنه و همزمان به همه request ها پاسخ داده میشه.
کنترل همزمان (Concurrency) در Entity Framework چگونه است ؟
حال ببینیم موضوع همزمانی چگونه در انتیتی فریم ورک کنترل می شود. فرض کنید یک ردیف از اطلاعات (یک entity) همزمان توسط چند کاربر درخواست ویرایش شود. در این جا چند راه حل وجود دارد.
- راه حل اول این است که به محض درخواست ویرایش توسط کاربر اول رکورد قفل می شود و تا پایان عملیات این رکورد در اختیار سایر کاربران قرار نمی گیرد. در این روش رکورد مورد نظر تا پایان عملیات به صورت read only می باشد و فقط جهت خواندن قابل استفاده است. در این روش در صورتی که تعداد request ها بالا باشد و همزمان ویرایش های زیادی انجام شود افت کارایی برنامه را شاهد خواهیم بود.
- راه حل دوم Optimistic Concurrency می باشد. در این روش همان طور که از نام آن پیداست فرض بر خوشبینانه بودن عملیات است. یعنی اگر همزمان چندین درخواست برای ویرایش یک انتیتی صادر شود همه تغییرات صورت میگیرد و در نهایت رکورد با همه تغییرات ذخیره می شود. دقت کنید فرض بر این است که هر درخواست بر یک Property از entity تغییر می گذارد و در نهایت تغییرات صورت گرفته بر بخشی از انتیتی مجتمع شده و انتیتی نهایی ذخیره می شود. این روش به دلیل اینکه نیاز به نگهداری تغییرات هر کاربر به صورت جداگانه و در نهایت مجتمع کردن آنها می باشد نیاز به منابع حافظه ای زیادی دارد. دقت کنید در این حالت اگر تغییرات بر یک Property واحد انجام شود تغییرات کاربر نهایی ذخیره خواهد شد.
- راه حل سوم هم نمایش پیغام به کاربران دوم و ... است. یعنی مشخص کنیم انتیتی در حال حاضر توسط یک کاربر دیگر در حال تغییر است.
- راه حل چهارم و پیش فرض هم بر این مبناست که وقتی موجودیتی از دیتابیس فراخوانی می شود این موجودیت توسط EF پیگیری می شود و تنها در صورتی که تغییری در آن رخ دهد به عنوان ویرایش شده برچسب می خورد.
در مجموع موضوع همزمانی در انتیتی فریم ورک به نحوه مدیریت همزمان دسترسی به یک رکورد خاص اشاره دارد.
بحث همزمانی در حین کار با اطلاعات پایگاه داده موضوع مهمی می باشد. در Sql Server هم به چهار نوع همزمانی رخ می دهد.
- Lost Update
- Dirty Read
- Non Repeatable
- Phantom Read
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- نمایش صفحه در پنجره جدید با کلیک روی لینک (تگ a) در Asp
- افزودن مقادیر به صورت دستی به List دریافت شده از ریپازیتوری
- رفع خطا در مایگریشن - Specify ON DELETE NO ACTION or ON UPDATE NO ACTION
- استفاده از دستور Group By در انتیتی فریم ورک
- محاسبه مجموع فروش بازاریاب و فروشنده در Sql Server
- کاربرد متد AsNoTracking در انتیتی فریم ورک
- فرق بین IEnumerable و IQueryable در دستورات انتیتی فریم ورک چیست ؟
- فرق بین انتیتی فریم ورک با LINQ چیست
- دلیل خطای Keyword not supported: data source در انتیتی فریم ورک Code First
- ایجاد کانکشن استرینگ داینامیک در WPF (تغییر پایگاه داده و سرور در نرم افزار)
- تبدیل کاراکترهای عربی به فارسی در سی شارپ | تبدیل کاراکتر "ی" به "ی" در WPF
- جا به جایی بین رکوردها در DataGrid در WPF و نمایش در اطلاعات تکست باکس