برنامه‌نویسی موازی در دات‌نت مدرن با ویژوال استودیو 2026 (جلد دوم)
نویسنده:
مرضیه قویدل
مترجم:
سال نشر:
1405
صفحه:
187
نوبت چاپ:
1

اگر جلد اول این کتاب را با دقت مطالعه کرده باشید، اکنون با مفاهیم بنیادین برنامه‌نویسی موازی و ناهمگام در دات‌نت آشنا هستید. می‌دانید چگونه با Task و async/await کدهای ناهمگام بنویسید، چگونه با Parallel.For و Parallel.ForEach  حلقه‌های سنگین را بین هسته‌های پردازنده تقسیم کنید، و چگونه با PLINQ پرس‌وجوهای موازی بر روی مجموعه داده‌ها بنویسید. شما پایه‌ی محکمی برای ورود به دنیای پیشرفته‌ی برنامه‌نویسی موازی دارید.

پیش‌گفتار / ۱۱

**فصل پنجم: مجموعه‌های هم‌روند (Concurrent Collections)** / ۱۷

اهداف فصل / ۱۹

۵-۱ مقدمه: چرا به مجموعه‌های هم‌روند نیاز داریم؟ / ۱۹

۵-۱-۱ مشکلات روش قدیمی (استفاده از قفل) / ۲۰

۵-۱-۲ معرفی مجموعه‌های هم‌روند (Concurrent Collections) / ۲۰

۵-۱-۳ مجموعه‌های هم‌روند همیشه سریع‌تر نیستند / ۲۱

۵-۲ فضای نام و مجموعه‌های اصلی / ۲۲

۵-۲-۱ جدول مجموعه‌های هم‌روند اصلی / ۲۲

۵-۲-۲ واسط IProducerConsumerCollection / ۲۳

۵-۲-۳ الگوی تولیدکننده-مصرف‌کننده (Producer-Consumer) / ۲۳

۵-۲-۴ مثال استفاده از ConcurrentQueue در الگوی تولیدکننده-مصرف‌کننده / ۲۵

۵-۳ همگام‌سازی سطح پایین: SpinLock و SpinWait / ۲۶

۵-۳-۱ ساختار قفل چرخان (SpinLock) / ۲۶

۵-۳-۲ ساختار چرخش هوشمند (SpinWait) / ۲۹

۵-۳-۳ مدل همگام‌سازی دومرحله‌ای (Two-Phase Locking) / ۳۰

۵-۴ پشته هم‌روند (ConcurrentStack) با ساختار LIFO / ۳۱

۵-۴-۱ عملیات اصلی در پشته هم‌روند (ConcurrentStack) / ۳۱

۵-۴-۲ مثال ردیابی زمان ورود و خروج متدها با پشته هم‌روند / ۳۲

۵-۵ صف هم‌روند (ConcurrentQueue) با ساختار FIFO / ۳۴

۵-۵-۱ عملیات اصلی در صف هم‌روند (ConcurrentQueue) / ۳۴

۵-۵-۲ مثال شبیه‌سازی سفارشات در یک فروشگاه اینترنتی / ۳۵

۵-۶ کیسه هم‌روند نامرتب (ConcurrentBag) / ۳۷

۵-۶-۱ ساختار داخلی و مکانیزم دزدی کار (Work-Stealing) / ۳۸

۵-۶-۲ عملیات اصلی در کیسه هم‌روند (ConcurrentBag) / ۳۸

۵-۶-۳ مثال شبیه‌سازی ورود و خروج مشتریان در یک فروشگاه / ۳۹

۵-۶-۴ چه زمانی از ConcurrentBag استفاده کنیم؟ / ۴۰

۵-۷ دیکشنری هم‌روند (ConcurrentDictionary) / ۴۱

۵-۷-۱ مهم‌ترین متدهای ConcurrentDictionary / ۴۱

۵-۷-۲ مثال شمارش دفعات تکرار اعداد به‌صورت موازی / ۴۲

۵-۷-۳ نکات مهم عملکردی / ۴۳

۵-۸ مجموعه بلاک‌شونده (BlockingCollection) / ۴۴

۵-۸-۱ تفاوت BlockingCollection با سایر مجموعه‌های هم‌روند / ۴۶

۵-۸-۲ عملیات اصلی BlockingCollection / ۴۶

۵-۸-۳ تعیین ظرفیت محدود (Bounded Collection) / ۴۷

۵-۸-۴ مثال تولیدکننده-مصرف‌کننده با بلاک (کد کامل) / ۴۷

۵-۸-۵ نکات مهم و مقایسه با Channel / ۴۸

۵-۹ جایگزین مدرن: Channel (اختیاری) / ۴۸

۵-۹-۱ انواع کانال و نحوه ایجاد آن‌ها / ۴۹

۵-۹-۲ عملیات اصلی روی کانال / ۴۹

۵-۹-۳ مثال استفاده از Channel با تولیدکننده و مصرف‌کننده ناهمگام / ۵۰

۵-۹-۴ مزایای Channel نسبت به BlockingCollection / ۵۱

۵-۱۰ خلاصه و نکات کلیدی / ۵۲

تمرین‌های فصل پنجم / ۵۴

 

**فصل ششم: سفارشی‌سازی (Customization) در TPL** / ۵۵

اهداف فصل / ۵۷

۶-۱ مقدمه: چه زمانی به سفارشی‌سازی نیاز داریم؟ / ۵۷

۶-۲ مجموعه‌های تولیدکننده-مصرف‌کننده سفارشی / ۵۸

۶-۲-۱ پیاده‌سازی یک مجموعه تجمیع‌کننده (AggregatingConcurrentBag) / ۵۹

۶-۲-۲ ملاحظات و نکات مهم / ۶۱

۶-۲-۳ زمان استفاده از مجموعه‌های سفارشی / ۶۲

۶-۳ تقسیم‌کننده‌های سفارشی (Custom Partitioners) / ۶۲

۶-۳-۱ استفاده از متد Partitioner.Create برای قطعه‌بندی ساده / ۶۲

۶-۳-۲ پیاده‌سازی تقسیم‌کننده سفارشی (Custom Partitioner) / ۶۴

۶-۳-۳ نکات مهم در طراحی تقسیم‌کننده سفارشی / ۶۷

۶-۴ زمان‌بندهای سفارشی (Custom Task Schedulers) / ۶۷

۶-۴-۱ مثال زمان‌بند با حداکثر همزمانی محدود / ۶۸

۶-۴-۲ زمان‌بند زمینه همگام‌سازی برای محیط‌های UI / ۷۰

۶-۵ جمع‌بندی و توصیه‌ها / ۷۲

تمرین‌های فصل ششم / ۷۳

 

**فصل هفتم: الگوهای ناهمگام مدرن و async/await پیشرفته** / ۷۵

اهداف فصل / ۷۷

۷-۱ مقدمه: چرا به الگوهای پیشرفته ناهمگام نیاز داریم؟ / ۷۷

۷-۲ مقایسه Task و ValueTask جهت کاهش تخصیص حافظه / ۷۸

۷-۲-۱ چه زمانی از ساختار ValueTask استفاده کنیم؟ / ۷۹

۷-۲-۲ محدودیت‌های کلیدی در استفاده از ValueTask / ۸۱

۷-۳ پردازش جریانی داده با IAsyncEnumerable و ساختار await foreach / ۸۱

۷-۳-۱ مثال تولید جریانی اعداد تصادفی با تأخیر / ۸۲

۷-۳-۲ مثال خواندن خطوط یک فایل بزرگ به‌صورت ناهمگام / ۸۳

۷-۳-۳ نکات مهم در استفاده از IAsyncEnumerable / ۸۴

۷-۴ نحوه صحیح استفاده از متد ConfigureAwait(false) در کتابخانه‌ها / ۸۵

۷-۴-۱ مشکل بن‌بست در برنامه‌های UI بدون استفاده از ConfigureAwait / ۸۶

۷-۴-۲ راه‌حل: پیاده‌سازی ConfigureAwait(false) در کتابخانه‌ها / ۸۷

۷-۴-۳ قانون طلایی برای توسعه‌دهندگان کتابخانه و برنامه‌های UI / ۸۸

۷-۵ تبدیل رویدادهای قدیمی به Task با TaskCompletionSource / ۸۹

۷-۵-۱ مثال تبدیل رویداد DownloadStringCompleted به یک Task / ۸۹

۷-۵-۲ مثال تبدیل FileSystemWatcher به Task جهت انتظار فایل جدید / ۹۱

۷-۵-۳ نکات کلیدی درباره کار با TaskCompletionSource / ۹۱

۷-۶ سناریوهای واقعی کار با Task.WhenAll و Task.WhenAny / ۹۲

۷-۶-۱ فراخوانی همزمان چند وب‌سرویس با WhenAll / ۹۲

۷-۶-۲ پردازش سریع‌ترین پاسخ دریافتی با WhenAny / ۹۳

۷-۶-۳ پیاده‌سازی مهلت زمانی (Timeout) با WhenAny و Task.Delay / ۹۵

۷-۷ مدیریت منابع و لغو عملیات با CancellationToken و Timeout / ۹۷

۷-۷-۱ لغو ایمن عملیات با استفاده از CancellationToken / ۹۷

۷-۷-۲ ایجاد توکن لغو با زمان خاتمه خودکار / ۹۸

۷-۷-۳ ترکیب چند توکن لغو با متد CreateLinkedTokenSource / ۹۹

۷-۸ جمع‌بندی و نکات کلیدی / ۱۰۰

تمرین‌های فصل هفتم / ۱۰۲

 

**فصل هشتم: ارتباط کارآمد بین Taskها با Channel** / ۱۰۳

اهداف فصل / ۱۰۵

۸-۱ مقدمه: چرا به Channel نیاز داریم؟ / ۱۰۵

۸-۲ مقایسه جامع BlockingCollection و Channel / ۱۰۷

۸-۲-۱ مقایسه از نظر پشتیبانی بومی از async/await / ۱۰۸

۸-۲-۲ کنترل فشار برگشتی (Backpressure) و مدیریت ظرفیت / ۱۰۹

۸-۲-۳ بررسی کارایی و کارآمدی در رقابت پردازشی بالا / ۱۱۰

۸-۲-۴ انعطاف‌پذیری در قابلیت لغو عملیات (Cancellation) / ۱۱۰

۸-۲-۵ جمع‌بندی نهایی مقایسه / ۱۱۱

۸-۳ انواع کانال: کانال نامحدود و کانال محدود / ۱۱۲

۸-۳-۱ بررسی ساختار کانال نامحدود (Unbounded Channel) / ۱۱۳

۸-۳-۲ بررسی ساختار کانال محدود (Bounded Channel) / ۱۱۳

۸-۴ سناریوی تولیدکننده-مصرف‌کننده با Channel و ناهمگام‌سازی / ۱۱۶

۸-۵ پیاده‌سازی سفارشی کانال با اولویت‌بندی (Priority Channel) / ۱۱۸

۸-۵-۱ پیاده‌سازی کانال اولویت‌دار بر پایه کلاس PriorityQueue / ۱۱۹

۸-۵-۲ نکات مهم در طراحی و راهکارهای جایگزین / ۱۲۱

۸-۶ کاربرد Channel در سرویس‌های پس‌زمینه ASP.NET Core / ۱۲۲

۸-۶-۱ مراحل گام‌به‌گام پیاده‌سازی در قالب BackgroundService / ۱۲۲

۸-۶-۲ مزایای فنی و نکات کلیدی عملکردی / ۱۲۵

۸-۷ جمع‌بندی و نکات کلیدی / ۱۲۶

تمرین‌های فصل هشتم / ۱۲۸

 

**فصل نهم: پیوست – پروژه‌های عملی جامع** / ۱۳۱

۹-۱ مقدمه / ۱۳۳

۹-۲ پروژه فصل دوم: مسابقه جستجوی کلمه در فایل‌های حجیم (Task ناهمگام) / ۱۳۴

۹-۲-۱ هدف پروژه و ارتباط با مباحث فصل دوم / ۱۳۴

۹-۲-۲ کدهای کامل پروژه / ۱۳۴

۹-۲-۳ تحلیل و شرح خط‌به‌خط کدها / ۱۳۸

۹-۳ پروژه فصل سوم: تحلیل موازی گزارش فروش (موازی‌سازی داده) / ۱۴۰

۹-۳-۱ هدف پروژه و ارتباط با مباحث فصل سوم / ۱۴۰

۹-۳-۲ کدهای کامل پروژه / ۱۴۱

۹-۳-۳ تحلیل و شرح خط‌به‌خط کدها / ۱۴۵

۹-۴ پروژه فصل چهارم: تحلیل گزارش فروش با PLINQ و الگوی MapReduce / ۱۴۷

۹-۴-۱ هدف پروژه و ارتباط با مباحث فصل چهارم / ۱۴۷

۹-۴-۲ کدهای کامل پروژه / ۱۴۸

۹-۴-۳ تحلیل و شرح خط‌به‌خط کدها / ۱۵۱

۹-۵ پروژه فصل پنجم: شبیه‌سازی سیستم پردازش سفارشات (مجموعه‌های هم‌روند) / ۱۵۴

۹-۵-۱ هدف پروژه و ارتباط با مباحث فصل پنجم / ۱۵۴

۹-۵-۲ کدهای کامل پروژه / ۱۵۵

۹-۵-۳ تحلیل و شرح خط‌به‌خط کدها / ۱۵۹

۹-۶ پروژه فصل ششم: شبیه‌سازی مأموریت‌های محاسباتی با زمان‌بند سفارشی در TPL / ۱۶۱

۹-۶-۱ هدف پروژه و ارتباط با مباحث فصل ششم / ۱۶۱

۹-۶-۲ کدهای کامل پروژه / ۱۶۲

۹-۶-۳ تحلیل و شرح خط‌به‌خط کدها / ۱۶۶

۹-۷ پروژه فصل هفتم: پردازشگر ابری تصاویر با کش ناهمگام و جریانی / ۱۶۸

۹-۷-۱ هدف پروژه و ارتباط با مباحث فصل هفتم / ۱۶۸

۹-۷-۲ کدهای کامل پروژه / ۱۶۹

۹-۷-۳ تحلیل و شرح خط‌به‌خط کدها / ۱۷۲

۹-۸ پروژه فصل هشتم: سیستم پردازش صف اولویت‌دار در پس‌زمینه با Channel / ۱۷۵

۹-۸-۱ هدف پروژه و ارتباط با مباحث فصل هشتم / ۱۷۵

۹-۸-۲ کدهای کامل پروژه / ۱۷۶

۹-۸-۳ تحلیل و شرح خط‌به‌خط کدها / ۱۷۹

سخن پایانی / ۱۸۳

منابع و مراجع به تفکیک فصل / ۱۸۵

دسته بندی موضوعی موضوع فرعی
فنی و مهندسی مهندسی كامپيوتر

تمامی حقوق این سایت برای سازمان ترویج مطالعه و نشر جهاد دانشگاهی محفوظ است. نقل مطالب با ذکر منبع بلامانع است.
Copyright ©2026 Iranian Students Booking Agency. All rights reserved