وقتی دو هسته درگیر اجرای برنامه شدن، طبعا باری که روی دوش سایر هسته ها می افته افزایش پیدا میکنه، برنامه ها برای اجرا از سیستم عامل سرویس و منبع نمیخوان؟ مدیریت حافظه و پروسه ها و ... در سیستم عامل پردازنده لازم نداره؟
سخت افزار هایی که سیستم عامل باهاشون ارتباط داره وقتی برنامه شما در حال اجرا است خاموش که نشدن. مدیریت وقفه هایی که هر لحظه رخ میده پردازنده لازم نداره؟ هسته های دیگه بیشتر از قبل درگیر میشن چون سیستم عامل برای اجرای هر درخواست پردازش باید بگرده دنبال یک هسته که نخ های شما بهشون مجال دادید. شما ترافیک کاری رو افزایش دادید. طبعا فشار کاری رو همه هسته ها افزایش پیدا می کنه.
بالاخره با این توضیحات تون ، نمیتونم قبول کنم که در یک لحظه ، بیش از دو هسته درگیر پروسه ام باشه . درصورتی که کد اول در پست اول را اگه در 4 نخ درون پردازنده ی من اجرا کنم ، پروسه ام ، حداقل بیش از 85 درصد پردازنده را اشغال میکنه (یعنی حداقل 3 هسته بصورت همزمان) و گاها تا 100 درصد هم میره که باعث میشه به مدت مدیدی حتی پردازنده ، به نخ مربوط به موس ام هم پاسخگو نباشه و رسم موس خیلی کند صورت بگیره .
این موارد رو بررسی کنید.
اگر دو نسخه فایل اجرایی اون برنامه ProcessThreads رو اجرا کنید و در هر کدوم یک نخ بسازید و بدون محدودیت در CPU ها همزمان اجرا بشن، Total usage و CPU usage شون نسبت به وقتی که تنهایی اجراشون می کردید کاهش پیدا می کنه یا نه؟
هر دو حالت رو امتحان کنید. حتی بعدش CPU ها رو نصف کنید و نیمی رو در این یکی برنامه تیک بزنید و نیمی در اون یکی برنامه و مجددا یک نخ در هر کدوم اضافه کنید تا همزمان اجرا بشن.
آمار همچنان نسبت به اجرای تنهایی یک نخ در یک برنامه کمتره.
دو تا برنامه جدا هستند، پروسه هاشون مجزا است و میگید نمی تونم بپذیرم که بیش از دو هسته برای هر کدوم درگیر باشن. پس چه توضیحی دارید برای اینکه کارکرد شون کاهش پیدا کرد؟
نه. درست نیست. مثل اینه که برید توی بانک و نوبت بگیرید و بعد بگن آقا شماره تون رو صدا کردن برید باجه شماره 3، بعد بگید نخیر من فقط باجه شماره 5 میرم، صبر میکنم تا سرش خلوت بشه.
وقتی تعداد انتخاب ها بیشتر باشه دست سیستم عامل باز تر خواهد بود. فقط زمانی این انتخاب انحصاری میتونست مفید باشه که به هر دلیلی سیستم عامل اون هسته رو همیشه بیکار نگه داشته بود که بصورت عادی همچین کاری رو با منابع با ارزشش نمی کنه.
من هیچ مشکلی در اینکه دو هسته منطقی داخل یک هسته فیزیکی بتوانند دو نخ رو همزمان با هم اجرا کنند ندارم. این رو قبلا هم بارها گفتم و خودتون هم میدونید.
ادعای شما وقتی میتونه قابل قبول باشه که شواهدی بر نقض اش نباشه.
این همچنان ادامه همون فرض اولیه است که دارید که پردازنده یا داره کد نخ من رو اجرا میکنه یا اگه نمی کنه پس بیکار ئه.
به اون آزمایش 10 ثانیه اول برنامه توجه کردید؟ اونکه دیگه بر اساس بازدهی 100 درصد هسته که نیست، معیار شهودی و تجربی ارائه میده از اینکه یک نخ در شرایطی که محدودیتی در انتخاب هسته نباشه چه قدر میتونه پاسخگویی بگیره و اون رو معیار 100 درصد میگیره.
اون موارد سربار سخت افزاری و نرم افزاری که در اجرا پیش میومده در این معیار خود به خود کسر شدن تا به 100 درصد بازدهی واقعی رسیدیم. شما که نمی توانید همچین معیار شهودی رو با هر قانون تئوریکی ترکیب کنید.