سلامی مجدد آقا محسنبرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط TechBaMohsen برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
الان با همین fraps میشه 1%low رو بدست آورد؟! چجوری؟
اگه منظورت سوئیچ بین رشته های موجود (چه رشته ی اصلی یا فرعی) هست که قبلا توسط برنامه نویس ایلجاد شده باشه ، آره سیستم عامل کلا کنترل میکنه این قضیه رو ولی اگه منظورت اینه که برنامه (یا بازی) موقع ساخته شدن ، چند نخی ساخته نشده باشه (نه چند نخ اصلی و یا فرعی) اما خود سیستم عامل چند نخی اش کنه ، تا جایی که میدونم این طور نیستبرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط TechBaMohsen برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
یه مثال البته طولانی بزنم درکش خیلی بهتر میشه برای جایگاه هسته ها و نخ های پردازنده و نخ های اصلی و فرعی ایجاد شده در برنامه
نگاه کن هسته ها مثل کارخونه میمونن و نخ های هسته ها ، مثل درهای ورودی کارخونه میمونن . حالا یه پردازنده ی چهار هسته ای ، یعنی چهار تا کارخونه داره . این کارخونه ها رو فرضا در فاصله ی یک کیلومتری از هم فرض کن . حالا پردازنده ی چهار هسته ای چهار نخ یعنی 4 تا کارخونه داره که هر کارخونه اش ، یه در ورودی داره . طبعا مشخص هست پردازنده ی چهار هسته ای هشت نخ یعنی چهار تا کارخونه که هر کارخونه ، دو تا در ورودی برای تقاضای مشتریانش داره .
حالا اون قدیما که کوپن رسم بود . خوب؟ هر پروسه رو به عنوان یه خانواده در نظر بگیر که میخوان کوپن بدن به کارخونه دار و مثلا کالا تحویل بگیرن . نخ هایی که یه پروسه ایجاد میکنه ، همون تعداد اعضای خانواده در نظر بگیر . یعنی یه خانواده ممکنه فقط یک نفرشون کوپن شو ببره به کارخونه (یعنی تک نخی هست اون پروسه) و یه خانواده ی دیگه ممکنه 3 نفر از اعضای خانواده شون کوپن ببرن (یعنی اون پروسه ، 3 رشته ای هست)
همونطور که قبلا گفته شد ، هر برنامه و پروسه ، بصورت استاندارد فقط توسط یک هسته اجرا میشه . حالا فرض کن یه پروسه ی 4 نخی ، توی یه پردازنده ی 4 هسته ای 4 نخ اجرا میشه . پس قطعا فقط با یک هسته درگیره . اون هسته هم فقط یک نخ داره (چون 4 هسته ای 4 نخ هست یعنی هر هسته ، یک نخ داره) . در مثال ، مثل این میمونه که یه خانواده که 4 نفرشون که برادر هستن (معادل 4 نخ از پروسه) ، کوپن دست بگیرن و برن سمت کارخونه (فقط یک کارخونه . یعنی با 3 کارخونه ی دیگه کاری ندارن چون براشون نمیصرفه و فاصله شون زیاده تا اونجا و ...) . اول باید دربان اجازه ی ورود بده یعنی اول باید از درِ کارخونه (که همون نخ پروسه هست) ، بتونن وارد شن . 4 رشته همزمان در یه پروسه ، یعنی 4 درخواست همزمان از پردازنده . یعنی هجوم همزمان این 4 تا برادر بصورت همزمان و اصرارشون به وارد شدن همزمان 4 تایی با هم . اما اولا چون این کارخونه ، یک در داره و از هر در فقط یک نفر میتونه وارد شه ، پس نفر اول (برادر اول) وارد میشه . کارخونه داره کارشو میرسه اما میبینه نه این جوری نمیشه و کار این شخص داره طول میکشه پس با تشخیص خودش و دربان (پردازنده و مخصوصا سیستم عامل) ، کار این شخص رو بصورت موقت ، متوقف میکنه ، درخواست نفر بعدی رو میکنه و این نفر فعلی رو بیرون میکنه. نفر بعدی میتونه برادر دیگه ی این شخص باشه (رشته ی بعدی از همون پروشه) یا کلا یه شخص دیگه باشه (یه پروسه ی دیگه) اما حالا ما فرض میکنیم برادر دوم اون شخص (رشته ی بعدی اون پروسه) باشه. کار اون رو میرسه و هر وقت حس کرد که اینم داره معطلش میکنه ، متوقف اش میکنه و دوباره این رو هم بیرون میندازه و یه نفر دیگه (حالا ما فرض میکنیم همون برادر قبلی شو که بخشی از کارشو رسید) رو میاره و ادامه ی کارشو میرسه و این منوال ادامه داره .
پس داخل تک پردازنده های تک نخی ، چون یه در داره ، هر بار مجبوره یه نفر رو بیرون بندازه و این بیرون انداختن موقتی ، باعث وقت گیری بیشتر میشه .
اما در پردازنده های چند نخی ، چون هر هسته ، 2 نخ دارن پس هر کارخونه ، 2 تا در داره . در اینجا ، ابتدا دو تا برادر اول از دو در همزمان وارد میشن اما نکته ی مهم اینجاست که کارخونه داره باید کارشونو برسه و کارخونه هم که برای اینا یکی بیشتر نیست. پس کارخونه داره ، اول میاد کار یکی رو میرسه و دقیقا مثل قضیه ی قبلی هر وقت حس کرد شخص مورد نظر داره معطل اش میکنه ، کارشو متوقف میکنه اما چون برای رسیدن به کار نفر بعدی ، نفر بعدی هم پیشش حضور داره چون از یه در دیگه وارد شد ، پس لازم نیست که هر بار نفری که کارش تموم شد رو بیرون کنه (تا این بیرون رفتن و دوباره وارد شدن ، وقت شو بیشتر بگیره) . بنابراین چون دو تا همزمان حضور دارن ، بعد از متوقف شدن کار یک نفر ، سریعتر از دفعه ی قبلی میتونه سوئیچ کنه برای رسیدن به کار نفر بعدی چون نفر بعدی دقیق کنارشه و مثل حالت قبل ، منتظر هر بار ورود و خروج افراد نمیمونه . اما کارخونه دار هیچ کار بیشتری انجام نداد نسبت به قبل و فقط چون باعث شد سوئیچ سریعتری انجام بده ، کمتر منتظر ورود و خروج موند و پس نتیجه ی کلی کار ، رسیدگی سریعتر به کار افراد بود ولی هیچ وقت همزمان کار هر دو نفر رو انجام نداد (نه زمانی که کارخونه 2 در داشت و نه زمانی که تک در داشت)
امیدوارم متوجه شده باشی . پس این سرعت بیشتر پردازنده های چند نخی ، بخاطر همزمان انجام دادن نخ های یک پروسه نیست و اصلا چیزی بنام همزمان انجام دادن کار دو نخ در پروسه ها ، وجود خارجی نداره . بلکه سرعت بیشترش بخاطر سوئیچ سریعتر بین نخ های متفاوت یک پروسه هست (اونم در صورتی که یک پروسه ، نخ های متفاوتی داشته باشه یعنی از یه خانواده بیشتر از یه نفر مراجعه کنن) . پس اینی که گفتی یک پردازنده ای که میتونه 20 دستور رو در ثانیه اجرا کنه اما براش 8 دستور فرستاده میشه پس اگه نخ دیگه ساخته بشه ، میتونه همینطور با اجرای همزمان ، ظرفیت شو پر کنه ، درست نیست چون اصلا هسته ، چیزی بنام اجرای همزمان دو دستور نداره
کلا هم زمانی چند نخی برنامه مینویسن که واقعا نخوان منتظر یه نخ دیگه بمونن . مثلا یه نخ بخواد یه فایل rar رو اکسترکت کنه و یه نخ دیگه ، روال عادی برنامه شو بکار ببره و کاربر بتونه با نرم افزار کار کنه . اگه در این صورت فایل rar رو در نخ اصلی اکسترکت کنن ، تا فایل rar اکسترکت اش کامل نشه ، کاربر نمیتونه به برنامه دسترسی داشته باشه و برنامه تا کامل شدن اکسترکت ، not respond میشه که خیلی ها باهاش در برنامه آشناییم (که یه دلیل اش اینه که برنامه کاری رو که میخواد انجام بده ، در نخ مجزا انجام نمیده و اون کار هنوز تموم نشد)
تا اینجا قضیه ی نخ فرعی بود که اغلب برنامه نویس ها از این روش استفاده میکنن
اما همزمانی واقعی فقط در هسته ها انجام میشه . یعنی در صورتی که دو نخ از یک رشته بتونن به دو هسته ی (کارخونه) متفاوت ارسال شن ، در اینجاست که واقعا هر نخ بصورت همزمان اجرا میشه و پردازش میشن چون هر کارخونه ، کار خودش رو میرسه و ربطی به دیگری نداره
ممکنه بگی پس چرا یه پروسه ، یه نخ شو نمیفرسته توی یه هسته و یه نخ دیگه شو بفرسته توی یه هسته ی دیگه که واقعا همزمان اجرا شه که سرعتش هم بالاتر بره؟ جوابش اینه که برای برنامه هایی که خیلی ها حتی در سطح آنتی ویروس مینویسن ، واقعا سرعت یک هسته این قدر بالا هست که کاملا برای اون پروسه کافی باشه و کلا نیازی به بقیه ی هسته ها نباشه . کلا چند هسته ی همزمان ، بیشتر در کارهای سنگینی مثل رندرگیری و بازیها انجام میشه (البته به ساخت برنامه و بازی بستگی داره) . حالا برای این کار ، اگه میخوایم هر نخ توسط یک هسته پردازش بشه ، احتمالا باید به همون میزان نخ اصلی درست کنیم (دقیق نمیدونم چون این کار رو بلد نیستم ولی احتمالا باید همین طور باشه) که نیاز به هماهنگی دستی بین نخ های متفاوت داره که کار آسونی توی برنامه نویسی نیست تا جایی که میدونم و اغلب ، کمپانی ها ترجیح میدن وارد این بحث تقریبا سخت بشن
امیدوارم مفید بوده باشه و حوصله کنی در چند روز ، بخونی برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط TechBaMohsen برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
درباره ی پردازنده ی رایزن و ... ، چیزی نگفتم (کلا مبحث درباره ی پردازنده بود . ربطی به اینتل و AMD نداره)






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