نمایش محتوای اصلی
در حال بارگذاری ...
Search
سبد خرید (0)

برنامه‌نویسی وظیفه‌ای در .Net 4 & 4.5 با TPL و PLINQ

سید منصور عمرانی
(1 امتیاز)
شابک: 7-12-6529-600-978

اين كتاب به‌طور كلي به بحث برنامه‌نويسي چندنخي و برنامه نویسی موازي در چهارچوب كاري NET. مي‌پردازد. اجراي موازي، به‌ويژه در رابطه با عمليات I/O كه گلوگاه كُندي برنامه‌ها است، بسيار مهم است و از يخ‌زدن پنجره‌هاي برنامه جلوگيري كرده و پاسخ‌پذيري برنامه را افزايش مي‌دهد. در نتيجه كاربر، تجربه‌ي بسيار بهتري در كار با برنامه پيدا مي‌كند. پس از خواندن اين كتاب علاوه بر اينكه دانش خود را با جديدترين دستاورد NET 4.0. و NET 4.5. به روز مي‌كنيد، ديدگاه جديدي در برنامه‌نويسي پيدا خواهيد كرد. مهم‌ترين ويژگي كتاب اين است كه مباحث آن نظري نيست، بلكه كاربردهايي ارائه مي‌دهد كه مي‌توانيد آنها را به‌طور عملي در برنامه‌هاي خود به كار بريد و برنامه‌هايي بسيار سريع‌تر و كاربرپسندتر بنويسيد. از همه مهم‌تر برنامه‌هايي بنويسيد كه به طور خودكار مقياس‌پذير باشند و در هر سيستمي از بيشرين توان پردازش سخت‌افزار آن بهره ببرند.

1391
696
260,000 تومان 290,000 تومان
-
+
نوبت چاپ یک
ویرایش یک
وزن 1050 گرم
جلد 1 از 1
موجود است؟ بلی
چاپ شده است؟ بلی
در حال پیش فروش است؟ خیر
کتاب الکترونیکی است؟ خیر
فصل 1: تاريخچه‌ي پردازنده‌ها و برنامه‌نويسي هم‌روند

فصل 2: مفاهيم اوليه

فصل 3: پردازه‌ها و دامنه‌ي برنامه‌ها

فصل 4: برنامه‌نويسي چندنخي سنتي: قسمت اول

فصل 5: برنامه‌نويسي چندنخي سنتي: قسمت دوم

فصل 6: حوضچه‌ي نخ

فصل 7: مباني هماهنگ‌سازي

فصل 8: دستور lock

فصل 9: هماهنگ‌سازي با استفاده از Monitor

فصل 10: سيگنال‌دهي با Monitor

فصل 11: دستگيره‌ي انتظار

فصل 12: دستگيره‌ي انتظار رويداد

فصل 13: موانع حافظه و فرّاري

فصل 14: عمليات اتمي پايه

فصل 15: ساختارهاي دو رگه

فصل 16: قفل‌هاي خواندن و نوشتن

فصل 17: راه‌اندازي کُند به شکل ايمن

فصل 18: انبار محلي نخ يا TLS

فصل 19: تايمرها

فصل 20: فراخواني غير همزمان نماينده‌ها يا ADI

فصل 21: لغو کردن عمليات هرموند و الگوي لغو مشارکتي

فصل 22: توسعه‌هاي موازي يا PFX

فصل 23: توازي وظيفه‌اي

فصل 24: وظايف تو در تو و متوالي

فصل 25: ساير مباحث مرتبط با برنامه‌نويسي وظيفه‌اي

فصل 26: کلاس Parallel

فصل 27: Parallel LINQ

فصل 28: قسمت‌بندي

فصل 29: کلکسيون‌هاي هم‌روند

فصل 30: الگوي برنامه‌نويسي غير همزمان APM: قسمت اول

فصل 31: الگوي برنامه‌نويسي غير همزمان APM: قسمت دوم

فصل 32: الگوي غير همزمان مبتني بر رويداد يا EAP: قسمت اول

فصل 33: الگوي غير همزمان مبتني بر رويداد يا EAP: قسمت دوم

فصل 34: الگوي غير همزمان وظيفه‌اي يا TAP: قسمت اول

فصل 35: الگوي غير همزمان وظيفه‌اي يا TAP: قسمت دوم

فصل 36: نخ‌هاي .NET و فناوري COM

فصل 37: برنامه‌نويسي موازي و واسط کاربر

فصل 38: آزمايش

بررسي کارايي و اشکال‌زدايي برنامه‌هاي هم‌روند

فصل 39: دستورات SIMD و ساير کتابخانه‌هاي برنامه‌نويسي موازي

فصل 40: اختتاميه و جمع‌بندي.
# موضوع عنوان توضیح دانلود
1 کُدهای ضميمه کُدهاي ضميمه مجموعه‌ي مثال‌هاي کتاب شامل بيش از 170 مثال و تعدادي برنامه‌ي آموزشي نمونه در زمينه برنامه‌نويسي چندنخي و موازي دانلود
2 نمونه pdf نمونه pdf مجموعه صفحات قسمت ابتدايي کتاب شامل فهرست و بخشي از فصل يک دانلود
سیاوش ابراهیمی 1394/10/02 10:6:58

سلام ، در مثال صفحه 206 کتاب قسمت " بهبود دادن تکنیک قفل گذاری با دوبار بررسی " در پایین صفحه ، بعد از قسمت Monitor.enter نیازی به چک کردن متغیر s_value با null نیست

ایراد وارد نیست
1394/10/04 10:13:38

سید منصور عمرانی 1394/10/04 10:19:14

ضمن تشکر از توجه شما، ایراد ذکر شده صحیح نیست. علت مساله این است که بین خط قبل از Monitor.Enter() (جایی که s_value برای نخستین بار با null چک می‌شود) و Monitor.Enter() می‌تواند تعویض متن پیش بیاید و درست در همین میان یک نخ دیگر متغیر s_value را پر کند و خارج شود. در این حالت نخ بعدی زمانی Monitor.Enter() را فراخوانی کرده و s_lock را قفل می‌کند که s_value قبلا توسط نخ دیگری پر شده است. لذا نخ فعلی باید پس از Monitor.Enter() نیز چک کند آیا s_value تهی است یا خیر.

سیاوش ابراهیمی 1395/02/23 0:59:27

سلام آقای عمرانی . در صفحه 66 کتاب و در مثال 12-4 شما اومدین یک برنامه به شکل کاملا ترتیبی نوشتید و از نخ و فراخوانی به صورت پارامتری خبری نیست .

سیاوش ابراهیمی 1395/02/23 1:7:21

البته درسته چون نخ اصلی هست و به هرحال اجرا میشه . ولی خوب در اینجا بیشتر انتظار میرفت یک نخ جدید درست بشه و مقادیر به اون ارسال بشه .

سید منصور عمرانی 1395/02/23 16:13:15

بله. اشتباه را درست اعلام کرده‌اید. کُد صحیح بدنه‌ی متد Main بدین صورت است: Thread t = new Thread(new ParameterizedThreadStart(Print)); t.Start("Hello World!"); Console.ReadKey();

سیاوش ابراهیمی 1395/03/31 15:59:1

سلام آقای عمرانی . در صفحه 109 کتاب و در توضیح ساختار پیشفرض Signal شما گفتین که ترتیب اجرای نخ ها تاثیری نداره در حالی که کاملا تاثیر داره . اگر نخ t1 زودتر اجرا بشه Signal میده و به کارش خاتمه میده و با اجرای نخ t2 ، وقتی که به دستور Wait میرسه نخ بلاک میشه و هیچگاه از خواب بیدار نمیشه .

سید منصور عمرانی 1395/04/02 20:1:17

چنین نیست. دقت کنید ساختار SignalConstruct یک ساختار هماهنگ سازی فرضی است و در .NET چنین کلاسی وجود ندارد. اگر نخ t1 زودتر اجرا شود و Signal() را صدا بزند لزوما سیگنال او هدر نمی رود. هدر رفتن سیگنال به نوع ساختار هماهنگ سازی بستگی دارد. نمونه خوبی از این مساله دستگیره های انتظار (مانند ساختار AutoResetEvent) هستند که در فصل 12 توضیح داده شده است. اگر SignalConstruct را یک AutoResetEvent فرض کنید و نخ t1 متد Set() را برای این ساختار صدا بزند و زودتر از نخ t2 کارش را تمام کند، وقتی اجرای t2 به Wait() می رسد بلاک نمی شود و به کارش ادامه می دهد. اگر نخ t1 نیز دیرتر از t2 کارش را شروع کرده باشد t2 در نقطه Wait() بلاک می شود تا t1 کارش را انجام داده و سیگنال بدهد.

سید منصور عمرانی 1395/04/02 20:3:12

نمونه ای از این وضعیت را در مثال 12-1 صفحه 156 می توانید مشاهده کنید. توجه کنید مقصود از هماهنگ شدن t1 و t2 در مثال صفحه 109 این است که t1 و بخش اولیه نخ t2 یعنی متد Task2_1() بتوانند به طور موازی اجرا شوند، اما Task2_2() لزوما باید پس از اجرای t1 اجرا شود.

سیاوش ابراهیمی 1395/04/15 19:46:59

سلام آقای عمرانی ، در صفحه 177 کتابتون و در مثال 2-14 به گمانم باید مثدار متغیر value رو برگشت بدین و نه calc . چون که در داخل دستور lock اومدین مقدار جدید رو در Value قرار دادین و همچنین دستور CompareExchange هم مقدار رو در همین متغیر قرار میده

سید منصور عمرانی 1395/04/16 22:25:53

حق با شما است. اما واقعیت این است که متد MultiplyBy() نیز اصلا نیازی به مقدار برگشتی ندارد. زیرا حاصلضرب در نهایت داخل خود Value قرار خواهد گرفت و Value نیز یک متغیر public است.

سید منصور عمرانی 1395/04/16 22:40:16

توجه کنید مثال 2-14 نسخه تکمیل شده مثال 1-14 است که از فصل 22 کتاب C# 4.0 in a Nutshell صفحه 924 اخذ شده است. در کتاب مزبور پیش از انجام محاسبه از Thread.MemoryBarrier() و پس از مقایسه از spinwait.SpinOnce() استفاده شده تا در سناریوهای همروندی بسیار بالا از به دام افتادن پردازنده در اختیار نخی که عمل حاصلضرب را انجام میدهد جلوگیری شود. توصیه میکنم ساختار SpinWait را در کتاب مزبور (صفحه 922 تا 925) نیز حتما مطالعه نمایید.

امیر س 1395/07/24 22:4:31

سلام وقت بخیر... اگه این نمونه پی دی افی که گذاشتید چندصفحه محتویات کتاب هم میبود بهتر میشد! این که همش فهرسته!! اگه چندصفحه از محتوای آنرا هم بذارید بد نیست باور کنید با چندصفحه محتوا از یک کتابی به این مفیدی چیزی از زحمات نویسنده کاسته نمیشه!

سیاوش ابراهیمی 1395/11/05 16:13:49

صفحه 252 کتاب در کد های قسمت "متغیر نماینده را سراسری تعریف کنیم " برای متغیر indexOf نوع تعریف شده ، در صورتی که این متغیر به صورت فیلد در ابتدای کلاس تعریف شده و نیازی به تعیین کردن دوباره نوع ندارد

در حال بررسی

امتیاز
4.85/5 (400 نظر)
ثبت نظر/پرسش/پیشنهاد
;