آموزش کلاس های کالکشنی همروند Concurrent Collection ها در سی شارپ

تعداد ویدئو 77
زمان دوره 03:28:29
مترجم مرتضی گیتی
دوبلر مرتضی گیتی
سایت منتشر کننده پلورال سایت

آموزش کلاس های کالکشنی همروند Concurrent Collection ها در سی شارپ یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته ی آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته ی آموزشی آموزش کالکشن های همروند در سی شارپ است که با نام اصلی C# Concurrent Collections شرکت Pluralsight منتشر شده است.

Collection ها چه هستند؟

به منظور استفاده و مدیریت از گروهای از اشیا در برنامه های دات نت می توان آرایه ای از اشیا و یا Collection ی از اشیا را ساخت. کاربرد آرایه ها بیشتر در کار کردن با تعداد مشخصی از اشیا می باشد که همگی از یک نوع یکسان هستند. به عبارت دیگر آرایه ها در دات نت Strongly Typed هستند.

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

Collections-CSharp-e1585126095732

اگر مجموعه ای که قصد کار کردن با آن را دارید شامل عناصری می شود که همگی از یک جنس هستند می توانید از کلاس هایی که در System.Collections.Generic می باشند استفاده کنید. Collection هایی که جنریک هستند به ما امکان اضافه کردن اشیا غیرهمجنس را به مجموعه نمی دهند. علاوه بر این، در زمان بازیابی عنصری از این مجموعه ها نیازی به تشخیص نوع آن عنصر نیست.

Concurrent Collection ها چه هستند؟

در دات نت فریم ورک 4 یک namespace با نام System.Collections.Concurrent معرفی شد که حاوی کلاس های کالکشنی می باشد که نه تنها Thread-safe هستند بلکه مقیاس پذیری بالایی نیز دارند. به عبارت دیگر در برنامه نویسی همروند چندین Thread می توانند بدون نگرانی از بوجود آمدن مشکلات مربوط به برنامه های همروند از قبیل شرایط Race اقدام به درج عناصر در این کلاس ها و حذف عناصر از درون آنها کنند. این موضوع نیازی به Thread Synchronization اضافی در کد شما ندارد.

C-Concurrent-Collections

در زمان برنامه نویسی همروند، زمانی که می دانیم چندین Thread با یک کالکشن از داده ها
به صورت همزمان کار خواهند کرد و عناصری را در آن درج و از خواهند خواند استفاده از این نوع کلاس های کالکشنی توصیه می شود.

ضمناً توصیه می کنیم که از آموزش مباحث پیشرفته کالکشن ها Collection ها در سی شارپ و آموزش کلاس های کالکشنی در سی شارپ نیز دیدن کنید.

سرفصل مطالب آموزش ویدئویی Concurrent Collection ها (کالکشن های همروند) در سی شارپ

فصل اول: معرفی کالکشن های همروند

  • مقدمه ی دوره ی آموزشی
  • مقدمه
  • معرفی برنامه ی نمونه: The Geek Clothing Company
  • چند نخی (Multithreaded) کردن Queue
  • رفع مشکل برنامه با کلاس جنریک ConcurrentQueue
  • دلیل شکست مدت Enqueue از کلاس جنریک Queue
  • متدهای Atomic
  • چرا استفاده از قفل (lock) ها همیشه مناسب نیست
  • کالکشن های همروند همیشه از قفل ها استفاده نمی کنند
  • کالکشن های همروند و شرایط Race
  • انوع کالکشن های همروند
  • اینترفیس جنریک IProducerConsumerCollection و کلاس جنریک BlockingCollection
  • کلاس جنریک Partitioner و کلاس جنریک OrderablePartitioner
  • جمع بندی

فصل دوم: معرفی کلاس ConcurrentDictionary

  • مقدمه
  • عملیات اصلی Dictionary ها
  • تبدیل کردن به ConcurrentDictionary
  • چرا متد Add از کلاس ConcurrentDictionary مخفی است
  • تعدادی از متدهای Thread-safe
  • الگوی متدهای TryXXX و متد TryGetValue
  • متد TryAdd
  • متد TryRemove
  • متد TryUpdate
  • مشکل TryUpdate
  • متد AddOrUpdate
  • چالش بوجود آمدن شرایط Race
  • هر عملیات را در یک فراخوان متد تک انجام دهید
  • متد GetOrAdd
  • جمع بندی

فصل سوم: تمرین عملی با کلاس ConcurrentDictionary

  • مقدمه
  • معرفی مثال BuyAndSell
  • الگوریتم Buy-Sell
  • استفاده از AddOrUpdate برای به روز رسانی Concurrent Dictionary
  • استفاده از Interlock.Add برای به روز رسانی متغیر Total
  • متدهای Thread-safe بدون استفاده از قفل
  • چرا نمی توانیم از TryUpdate استفاده کنیم
  • به روز رسانی شرطی Concurrent Dictionary
  • اعمال شرط توسط Lambda در متد AddOrUpdate
  • چالش مربوط به عوارض جانی متدها (Side-effect ها)
  • متد AddOrUpdate و اجتناب از منطق های شرطی
  • جمع زدن مقادیر Concurrent Dictionary با استفاده از LINQ
  • استفاده از متد GetOrAdd برای نمایش مقادیر
  • تست کردن برنامه ی مثال در شرایط دشوار
  • جمع بندی

فصل چهارم: کالکشن های Producer-Consumer از قبیل Queue ،Stack و Bag

  • مقدمه
  • مروری بر Queue
  •  معرفی کلاس جنریک ConcurrentQueue
  • معرفی کلاس جنریک ConcurrentStack
  •  معرفی کلاس جنریک ConcurrentBag
  • سناریوهای Producer-Consumer (تولید کننده – مصرف کننده) کدامند؟
  • اینترفیس جنریک IProducerConsumerCollection
  • جمع بندی

فصل پنجم: تمرین عملی با کالکشن های Producer-Consumer و BlockingCollection

  • مقدمه
  • معرفی برنامه ی مثال SalesBonuses
  • Log کردن اشیا Trade به یک Queue
  • درج عناصر در Concurrent Queue
  • حلقه ی مصرف کننده: نظارت بر Concurrent Queue
  • جریان اصلی برنامه
  • محاسبه ی Bonus ها
  • چالش Polling
  • معرفی کلاس جنریک BlockingCollection
  • استفاده از متد Take از کلاس جنریک BlockingCollection برای جلوگیری از Polling
  • ارتباط کلاس جنریک BlockingCollection و اینترفیس IProducerConsumerCollection
  • قابلیت های دیگر کلاس جنریک BlockingCollection
  • جمع بندی

فصل ششم: بعضی از Best Practice های کار کردن با Concurrent Collection ها

  • مقدمه
  • کالکشن های همروند و مسئله ی Performance
  • بنچ مارک کردن کلاس ConcurrentDictionary با چندین Thread
  • دسترسی پراکنده به Shared State
  • کلاس ConcurrentDictionary از قفل های دانه ریز استفاده می کند
  • متد IsEmpty و پروپرتی Count در ConcurrentDictionary عملکرد بدی دارد
  • از اتکا به State یک ConcurrentDictionary خودداری کنید
  • Enumerate کردن و تغییر در یک کالکشن معمولی
  • Enumerate کردن و تغییر در یک کالکشن همروند
  • چه هنگان استفاده از کالکشن های همروند توصیه می شود؟
  • جمع بندی
  • جمع بندی بسته ی آموزشی

نقد و بررسی‌ها

هیچ دیدگاهی برای این محصول نوشته نشده است.

اولین کسی باشید که دیدگاهی می نویسد “آموزش کلاس های کالکشنی همروند Concurrent Collection ها در سی شارپ”

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دسته های محصولات

افزودن به سبد خرید