دلایل استفاده ناهمگامی (Asynchrony)
*مبحث Threadها در این سری آموزشی باز نخواهد شد. برای درک بهتر مفاهیم آموزشی، پیشنهاد میکنم از منابع دیگر در مورد Threadها مطالعه کنید.
دلایل استفاده ناهمگامی (Asynchrony)
چند وقت پیش برای پروژهی یکی از درسها باید یک مقاله رو پیادهسازی میکردیم (گروه بودیم). این مقاله روی پیکسلهای تصویر پردازش انجام میداد و چون تعداد تصاویر ورودی زیاد بودن، حجم محاسبات زیاد بود.
اولین پیادهسازی ما با متلب بود که زمان اجرایی برابر با 24 ساعت داشت. از اونجایی که متلب به صورت ذاتی کمی کند هست، سراغ سیشارپ رفتیم. پس از اینکه با سیشارپ پیاده سازی انجام شد، مدت زمان اجرا به 8 ساعت رسید که به نظر خیلی خوب بود. کمی بعد یکی از دوستانم که کاملا به دستورات سیشارپ (حتی از نظر کارایی) مسلطه، کد رو بازبینی کرد و دو تغییر زیر را ایجاد کرد:
1. در یک قسمت از برنامه به جای
Math.Pow(x,2)
عبارت x * x را قرار داد.
2. در قسمت دیگری از برنامه، محاسبات با اعداد صحیح کافی بود ولی من از double استفاده کرده بودم، پس بجای آنها از int استفاده کرد.
پس از اجرای برنامه با تغییرات بالا، مدت زمان اجرا به 3 ساعت کاهش یافت. دلیل این اتفاق برای هریک از موارد بالا این است که:
1. تابع Pow در سیشارپ به دلیل اینکه قابلیت توان رساندن اعداد اعشاری را نیز داشته باشد، از روش ضربی استفاده نمیکند و بجای آن از روابط دیگری که محاسبات بیشتری لازم دارند استفاده میکند. حتی برای توان 2 (البته من فکر میکردم این تابع اونقدری هوشمنده که توانهای صحیح و یا کوچیکو بدونه باید چیکار کنه).
2. محاسبات اعشاری کلا زمان بیشتری نسبت به محاسبات صحیح مصرف میکنند.
از این به بعد همیشه به یاد خواهم داشت که تا جای ممکن از محاسبات صحیح استفاده کنم و کارهای سادهی ریاضیو مستقیم کد بزنم و از توابع استفاده نکنم.