خیلی ممنون استاد . زحمت کشیدید .
الان این برنامه رو نوشتید تا هر وقت دکمه ی New Thread را میزنیم ، هر بار به مدت 20 ثانیه ، نخ جدیدی ساخته و پردازش میشه و وقتی مثلا دو بار این دکمه رو زدیم ، 2 نخ ساخته میشه و نشون بده عملکرد هر هسته و سوئیچ بین این نخ ها در هسته ها ، چجوری هه؟
الان یعنی با این عکسی که گذاشتید ، اولا 2 نخ ساختید که مدام بین دو هسته ی منطقیِ پردازنده تون ، در حال سوئیچ کردن هست اما همزمان فقط در یک هسته ی منطقی در حال اجرا شدن هست (چون نمودار سبز رنگ ، در یک لحظه ، فقط در یک قسمت وجود داره) . درست میگم؟
اما من همین برنامه تون را در کامپیوتر خودم اجرا کردم و نتیجه جور دیگه ای هست :
اگه درکی که من از برنامه تون کردم ، درست باشه ، واسه ی من وقتی 3 نخ را اجرا میکنم ، همزمان 3 هسته ی فیزیکی (که برای من برابر با 3 هسته ی منطقی هم هست) را درگیر میکنه (یعنی 75 درصد از پردازنده رو پروسه ام اشغال میکنه حتی طبق آمار برنامه ی شما که عکسش مشخص هست و برخلاف عکسی که برای شما هست ، هست) .
وقتی 2 نخ ایجاد کنم ، همزمان 2 هسته و اگه 4 نخ ، همزمان همه ی هسته ها را درگیر میکنه .
میگم استاد ، شاید بخاطر این باشه که شما در قسمت پایینی برنامه تون ، فقط دو هسته (که نمیدونم فیزیکی هستن یا نه) را فقط تیک میزنید . همه ی هسته هاتون را تیک میزنید ، نتیجه شو ببینید چی میشه؟
الان ، این به معماری پردازنده ی من فقط مربوط میشه؟
اگه نه ، پس واسه ی شما چرا مثل من نیست و در یک لحظه ، فقط یک هسته ی منطقی را اشغال میکنه؟
میتونم مدل دقیق پردازنده تون را بدونم؟ (اگه دوست دارین بگین)
که این کدهای clr یا ماشین مجازی را در Task Manager ، در سربرگ Performance ، بصورت Kernel Time مشخص میشه (قبلا گفته بودید) . درسته؟
بله میدونم . ممنون
منظورتون اینه که Task Manager ، مثل عکسی که از برنامه تون فرستادید ، نشون نمیده که همزمان ، فقط یک هسته داره روی پروسه مون پردازش انجام میده؟
اگه آره ، خوب توی قسمت سربرگ Details میگه دیگه . مثلا میگه 25 درصد از توان پردازنده ، صرف پروسه مون داره میشه (حالا کدهای clr و اینها که گفتید ، میدونم و بماند) که این 25 درصد ، در 4 هسته ، میشه یک هسته بصورت همزمان دیگه .
یا مثلا میگه 50 درصد که میشه 2 هسته بصورت همزمان و ... . درسته دیگه؟
بله ، خیلی خوب میشد اگه یه برنامه شبیه همچین چیزی که شما نوشتید رو Task Manager داشت . خیلی دقیق تر میشد به نکات ریز پی برد .
اما همونطور که قبلا هم گفته بودید ، زمان سوئیچ کردن و هدر رفتن و سربار یک هسته ، برای ما و سیستم عامل ، مهم نیست چون به هر حال در اون زمان ، از دید سیستم عامل ، اون هسته در حالت اشغال قرار داره . چه در حال سوئیچ روی نخ ای باشه و چه منتظر رسیدن اطلاعات از کش یا رم باشه .
یه نکته ی رو خواستم بپرسم اینکه الان رم من دو کاناله که هست ، حداکثر ، همزمان دو هسته میتونن از رم ام اطلاعات بخونن یا توش اطلاعاتی بنویسن؟ دو هسته ی دیگه ، فقط میتونن عملیاتی را انجام بدن که مربوط نباشه به خوندن و نوشتن اطلاعات از رم . درسته؟ مثلا اون دو هسته ی دیگه ، نهایتا میتونن اطلاعات رو از کش یا رجیستری شون بخونن و پردازش کنن . درسته؟
سئوال بعدی اینکه چرا پروسه ی سی شارپ مون ، وقتی خودمون اصلا نخ ای درست نمیکنیم ، در برنامه ی Resource Monitor در قسمت Threads اش میگه بیش از 1 نخ داره؟ (معمولا بین 8 تا 15 نخ میگه داره) . اینها ، نخ هایی هست که خود clr ایجاد میکنه؟
خیلی ممنون استاد از جواب تون![]()