سلامی مجدد
این را هم بگم که معمولا کدهایی که باعث سوئیچ کردن پردازنده بشن ، باعث ایجاد سربارِ بیشتر (و گاها بسیار بیشتر) نسبت به بقیه ی کدهای دیگه در پردازنده میشه . مخصوصا اگه کدهایی که پردازنده در هر سوئیچ بخواد اجرا کنه ، کم هم باشن .
سوئیچ کردن هم به این معناست که یه کدی باعث بشه که پردازنده ، اجرای اون کد را رها کنه و کد جدید دیگه ای که بهش سپرده میشه را بخواد اجرا کنه . سوئیچ کردن ، بیشتر برای نخ ها مفهوم داره ولی در توابع ها هم میتونه مفهوم داشته باشه . چون وقتی از درون تابعی ، هر تابع دیگه ای فراخونی میشه (چه میخواد همون تابع باشه که به عنوان متد بازگشتی محسوب میشه یا هر تابع دیگه ای) ، پردازنده باید ادامه ی اجرای کدهای تابع اولی که در حال اجرا بود را متوقف کنه و حافظه ی جدیدی (استک) برای تابعی که فراخونی قراره بشه در نظر بگیره و بره اون تابع را اجرا کنه .
در متدهای بازگشتی ، مخصوصا اگه بسیار زیاد فراخونی بشن و مخصوصا اگه کدهایی که قراره اجرا کنه ، در اون تابع بسیار کم باشه (مثل تابع StackMethod در پست 3 که کد داده شد) ، سربار زیادی برای پردازنده خواهد داشت .
اگه در این نوع متدها ، کدی باشه که باعث توقف اجرا بصورت موقت هم بشه (مثل Thread.Sleep که البته هنوز به این کد نرسیدی و توی فیلم هم گفته نشد) ، علاوه بر سوئیچ بین متدها ، سوئیچ اجباری و حتمی بین نخ ها هم خواهد بود که این سربار را به بیشترین میزان خودش میرسونه (مثل قضیه ی همون ترافیکی که قرار بود بار از حوالی برج میلاد تا حوالی میدان آزادی بره) .






پاسخ با نقل قول

Bookmarks