(۱۰ مهر ۱۳۹۰ ۱۱:۳۴ ق.ظ)_Milad_ نوشته شده توسط: بحثتون در مورد تفاوت هزینه نخ های سطح هسته و سطح کاربر صحیح است ولی دقت کنید تفاوت اصلی این دو در چیز های دیگه هست و این قدر سطحی نیست. مثلا اگه ۵ نخ سطح هسته (با استفاده از یک کتابخونه سطح کاربر) برای یک برنامه تعیین کرده باشید و در زمان اجرای این پردازه یکی از اینها یک system call مثلا یک page fault رو حادث بشه کل ۵ نخ و در واقع پردازه بلاک میشه! اما اگه نخ سطح کرنل باشه فقط اون نخ که این رویداد بلاک شونده رو حادث شده بلاک میشه. همین موضوع باعث میشه که نخ های سطح کاربر سبکتر باشند چه تو مهاجرت چه تو همگام سازی اما همه اینها فقط در مورد نخ هایی که متعلق به یک پردازه هستند صادق چون هسته خبری از وجود اینها نداره و همه اینها رو به چشم همون پردازه می بینه. داستان بعدی اینه که وقتی کرنل خبری از وجود این نخها نداشته باشه نمی تونه به هر یک از اینها یک کوانتوم زمانی تخصیص بده در واقع کرنل فقط می دونه یه پردازه x هم هست که باید بهش CPU رو تخصیص بده مثلا ۱۰ms. این ۱۰ms باید بین همه این ۵ تا نخ تقسیم بشه (توسط همون کتابخونه سطح کاربر میشه انجام داد) اما اگه اینها نخ های سطح کرنل بودن مثلا به هر کدوم ۱۰ms تخصیص داده میشد.
اینکه نخ سطح هسته و سطح کاربر باهم نفاوتهای اساسی دارند که شکی نیست درواقع مزایا و معایب این دو معکوس همدیگه هستند من خواستم فقط برای پستی که شما اشاره کردید که هزینه سوئیچ نخها کم هست به این اشاره بکنم که همیشه هم اینطور نیست
(۱۰ مهر ۱۳۹۰ ۱۱:۳۴ ق.ظ)_Milad_ نوشته شده توسط: نقل قول: "افزایش سرعت اجرا و زمان پاسخ فرایندهایی که مکررا مسدود میشوند"
یعنی در یک فرایند ماژولاریتی و درجه بندی رو افزایش بدیم یعنی فرایند بجای یک نخ دارای چندین نخ باشه که وقتی یک نخ مسدود شد تمام فرایند مسدود نشه و وقتی یکی از نخها مسدود شد بقیه نخها بتونن به کارشو نادامه بدن و این معنی همروندی رو میده
پس مهمترین مزیت نخها ایجاد همروندی است
این جمله هم درست هست اما ناقص! باید اشاره می کرد که این موضوع یکی از مزیت های نخ های سطح کرنل هست.
در مورد نخ های سطح کاربر چون هسته از وجود اونها خبری نداره نمی تونه اونها رو زمانبندی کنه! برای همین هسته فقط پردازهها رو زمان بندی می کنه و از وجود اونها آگاهی داره. بنابراین اگه پردازه x که ۵ تا نخ سطح کاربر داشته باشه تو بازه زمانی که بهش تخصیص داده میشه می تونه خیلی سبک و سریع بین نخ هاش تعویض صورت بگیره اما وقتی یکی ازین نخها بلاک بشه یا مهلت زمانی پردازه تموم بشه باید CPU رو ازین پردازه گرفت و به پردازه بعدی داد (که شاید اونم ۷ ۸ تا نخ واسه خودش داشته باشه و بخواد نخ ۴ ش رو فعال کنه تو این لحظه!!) و این یعنی تعویض متن بین دو پردازه که زمان انجام این کار مشخص. در مورد نخ های سطح هسته هم می دونید که هسته یک چدول نخ برای نگهداری و اطلاع از نخها داره و همین طور هر نخ یه TCB (یا TEB اگه اشتباه نکنم) داره. هزینه سوئیچ بین نخ های سطح هسته هم می دونید و واضح که سنگین هست. فکر کنم مشخص شده باشه که هزینه مهاجرت از نخ های یک پردازه کم هست ولی هزینه مهاجرت از نخ هایی که مربوط به یک پردازه نیستند تفاوتی با تعویض متن بین دو پردازه نداره.
من فکر میکنم این جمله مربوط به نخهای سطح هسته نیست
در صفحهات بعد که این مطالب توضیح داده شده به این نکته اشاره شده که برای استفاده بهینه از نخها بهتر از ترکیب نخهای سطح هسته و سطح کاربر هردو در یک فرایند استفاده بشه و از فرایندهای سبک وزن هم برای مدیرت نخها در فرایند استفاده بشه
من فکر میکنم این جمله و این نکته برای این نوع استفاده ترکیبی از نخها ذکر شده است