خیلی ممنون استاد .
بذارید فعلا ، فقط این تیکه تون را جواب بدم . ممنون از بقیه ی قسمت های جوابی که دادین .
وقتی توی پردازنده ی 4 هسته ای میگه مثلا 75 درصد پردازنده داره پروسه ی تو را پردازش میکنه (با کدهای clr مربوطه که مهم نیست) ، خوب یعنی 3 هسته را درگیر کرد دیگه . اگه درگیر شدن بصورت همگام بوده باشه که دیگه 75 درصد نمیشه . میشه 25 درصد چون در یک لحظه ، فقط یک هسته داره کد را اجرا میکنه .
اتفاقا خروجی 2 برابر میگیریم دیگه (همون کد اول در پست اول که 2 برابر سریعتر از خروجی کد دوم در پست دوم هه)
بعد اینکه اگه در برنامه ی خودتون هم اگه فقط یک هسته را فعال کنیم و بیش از 2 نخ را اجرا کنیم ، کارایی کمتر میشه پس این نشون میده که در این صورت 2 نخ در یک هسته اجرا میشن (اگه فقط یک هسته را فعال کنیم و تیک بزنیم) (چون گفتید این افزایش کارایی بخاطر اینه که وقتی یک نخ اجرا میکنیم ، کل یک هسته تمام توانش را برای کد ما نمیذاره اما با ایجاد چند نخ و سوئیچ اون (تک) هسته روی نخ هامون ، به این دلیل هست که کارایی اش افزایش پیدا میکنه .
در این صورت گفتم کارایی ، حداقل باید 90 درصد افزایش پیدا کنه (یعنی حداقل نزدیک به دو برابر بیشتر بشه) که اولا نقاط بحرانی در نخ هامون وجود نداشته باشه ( که همونطور که میدونید ، مثلا به متغییر مشترکی در چند نخ نخوایم مشترکا دسترسی پیدا کنیم و بخونیم یا توش بنویسیم) و همچنین یه برنامه ای رو در تک هسته و تک نخ در قیاس با یه برنامه ای رو که در چهار هسته (و چهار نخ) اجرا کنیم ، گفتم . یعنی هر هسته ، تقریبا 30 درصد افزایش کارایی داشته باشه که در یه پردازنده ی 4 هسته ای (به نسبت تک هسته ای تک نخ) میشه 3*30 که میشه 90 درصد . یعنی یه برنامه ی 4 نخ هه (که در 4 هسته اجرا میشه و نقاط بحرانی نداره) حداقل باید 90 درصد یعنی 2 برابر سریعتر از حالت تک هسته ای باشه . مثل کد اول در پست اول که دادم .
و منظورم این بود که اگه کلاس Thread ها فقط از یک هسته (بصورت همزمان) استفاده میکنن اما در عوض کلاس Parallel ها از چند هسته (بصورت همزمان) میتونن استفاده کنن ، پس توی الگوریتمی که در پست 5 دادید یا کد اول که در پست اول دادم (که نقاط بحرانی هم ندارن) رو وقتی در پردازنده ی 4 هسته (ی فیزیکی) اجرا میکنیم ، پس حداقل باید تفاوت 2 برابر اجرای سریعتر در کلاس Parallel ببینیم (چون همزمان در 4 هسته اجرا میشه) اما این اختلاف در بیشترین حد خودش به 10 درصد هم نمیرسه . گاها با هم برابر و گاها هم کلاس Thread بهتر عمل میکنه .
قضیه ی بعدی اینکه من وقتی توی پردازنده ام 4 نخ ایجاد میکنم (مثلا کد اول در پست اول را در 4 نخ اجرا میکنم) ، چون کارکرد پردازنده گاها تا 100 درصد میرسه (نمیدونم چرا گاها تا 85 و گاها تا 95 و گاها تا 99 و حتی گاها تا 100 درصد کارکرد پردازنده میره) ، یعنی در واقع اون مواقعی که کارکردش تا 100 درصد میرسه ، سیستم ام کم میاره و حتی موس رو هم بخوبی نمیتونم حرکت بدم و بصورت واضح موسم بسیار کند حرکت میکنه . خوب اگه توی یه هسته کدم بصورت همزمان اجرا میشد ، پس 3 هسته ی دیگه ام آزاد میبود و دیگه پردازش نخ مربوط به عملیات موس که نباید با مشکل کندی شدید رو به رو میشد .