PDA

مشاهده نسخه کامل : مبحث پروسس (Process ) و نخ(thread) در برنامه نویسی



rbm
30-01-23, 09:14
سلام به دوستان
تا حالا توی انجمن چندین تاپیک بوده که دوستان درمورد انواع پردازنده ها و مباحث مربوط به تعداد هسته ها و رشته ها و نخ ها صحبت کردند.

با توجه به اون مباحث ، اگر یک نفر بخواد نرم افزار محاسباتی (حسابداری - سی آر ام - تحلیل و ...) برای استفاده در ایران طراحی کنه، چقدر مهمه که توی برنامه نویسی از متدهای multi threading استفاده کنه؟

چون استفاده از multi threading در یک نرم افزار حجیم یکم کار رو سخت تر میکنه - چون نیاز به کلاس نویسی و تقسیم دستی کلاس ها بین thread های تعریف شده داره.

با توجه به این مسئله آیا رعایت multi threading ارزش وقت و هزینه رو داره ؟ با توجه سخت افزار های موجود و مورد استفاده در ایران آیا این روش تاثیر ملموسی خواهد داشت؟

SajjadKhati
30-01-23, 09:56
سلام به دوستان
تا حالا توی انجمن چندین تاپیک بوده که دوستان درمورد انواع پردازنده ها و مباحث مربوط به تعداد هسته ها و رشته ها و نخ ها صحبت کردند.

با توجه به اون مباحث ، اگر یک نفر بخواد نرم افزار محاسباتی (حسابداری - سی آر ام - تحلیل و ...) برای استفاده در ایران طراحی کنه، چقدر مهمه که توی برنامه نویسی از متدهای multi threading استفاده کنه؟


سلام
ربطی به نرم افزار نداره .
معمولا ربط به این داره که چقدر کارهایی که میکنید ، از هم مجزا هستند و مخصوصا کار مجزایی که پردازش سنگین هم بخواد .
ممکنه حتی در یک متد ، دو ، یا چند کار متفاوت و مجزای سنگین داشته باشید که بصرفه یک ، یا چند نخ مجزا ایجاد کنید اما حتی پیش بیاد که در کل یک نرم افزار ، کاری این چنینی نباشه .

البته عمده ترین کاربرد نخ ها ، در مورد بالاست .
بجز این ، نخ های مجزا را هم زمانی ایجاد میکنن که نخ اصلی (یا همون نخ ui ئه برنامه) ، بخواد پاسخگو باشه و قفل نکنه (که معمولا در این حالت ، یه نخ ساده میسازن که مدیریت اش هم چندان پیچیده نیست و البته معمولا کارایی ای هم جز پاسخگو کردن نخ اصلی نداره ، یعنی باعث افزایش سرعت خاصی در برنامه هم نمیشه) .



چون استفاده از multi threading در یک نرم افزار حجیم یکم کار رو سخت تر میکنه - چون نیاز به کلاس نویسی و تقسیم دستی کلاس ها بین thread های تعریف شده داره.


بله .
بسته به نوع نرم افزار و نوع کار نخ ها و مخصوصا پیچیدگی کار ، در موارد زیادی ، کار را شدیدا سخت میکنه مخصوصا هر چی تعداد نخ ها زیادتر بشه .

اگه نخ ها در جای مناسب شون استفاده نشن ، دقیقا تاثیر برعکس داره . یعنی بجای اینکه افزایش کارایی و سرعت داشته باشه ، نسبت به نخ های کمتر ، حتی ممکنه باعث کاهش سرعت بشه . مخصوصا اگه چند نخ ، به یک داده ی مشترک (که معمولا متغییر سراسری هستن) بخوان دسترسی داشته باشن و هر چی میزان این نوع دسترسی ها بیشتر باشه ، هم مدیریت اون قطعه از کد ، پیچیده تر میشه و هم کاراییِ اون قطعه از کد ، پایین تر میاد (مخصوصا اگه سوئیچِ بینِ نخ ها یا context switch ، بیشتر بشه) .



با توجه به این مسئله آیا رعایت multi threading ارزش وقت و هزینه رو داره ؟ با توجه سخت افزار های موجود و مورد استفاده در ایران آیا این روش تاثیر ملموسی خواهد داشت؟


قطعا اگه در جای مناسب اش استفاده بشه ، ارزش داره (دو مورد از موارد پر استفاده اش ، در بالا گفته شد) .
ربط چندانی به سخت افزار نداره . شما اگه 2 نخ در برنامه تون بنویسید (منظور ، 2 نخ ای که کار زیادی و مخصوصا مستمری انجام بدن نه اینکه نخی که کار سبک ، فرضا مثل نخی که برای پاسخگو کردن نخ ui مینویسن) ، باز هم یه پردازنده ی 2 هسته ای برای برنامه تون کافی هه (که از 15 سال پیش هم ، معمولا اغلب سخت افزارها ، پردازنده ی 2 هسته ای داشتن چه برسه به پردازنده های امروزی) .

هر چند با نرم افزارهایی که نام بردید کار نکردم اما بعیده که این برنامه ها ، همزمان ، بیش از 2 نخ ای که کار مداوم و طولانی ای بخواد انجام بده ، داشته باشن . یعنی در واقع ، به بیش از یه پردازنده ی 2 هسته ای نیاز داشته باشن (دقت کنید که تعداد نخ هاشون را نگفتم . ممکنه تعداد نخ ها در این برنامه ، ده ها یا صدها نخ باشه اما حجم کاری که اون نخ یا نخ ها انجام بدن ، مهم هست) .