PDA

View Full Version : بالارفتن میزان مصرف سی پی یو به علت استفاده از thread در سی شارپ



arastoahmadi
یک شنبه 27 آبان 1397, 10:34 صبح
سلام به همه اساتید گرامی دوستان من تو پروژه ای که با زبان سی شارپ نوشتم از thread های زیادی استفاده کرده ام که این thread ها دستوراتی هستند که داخل حلقه while تکرار می شوند از آنجایی که میزان مصرف سی پی یو به ۱۰۰ درصد می رسد لذا برنامه بسته می شود ، برای حل این مشکل ممنون میشم راه حل مناسبی پیشنهااد بدید یا اگر تکنولوژی جدیدی برای اینکار تعریف شده ممنون میشم معرفی نمایید

hi level hdd
یک شنبه 27 آبان 1397, 12:25 عصر
سلام. اگر حلقه while کار سنگینی انجام نمیدهد. از دستور sleep استفاده نمایید. به شدت مصرف سی پی یو رو پایین میاره

farhad_shiri_ex
یک شنبه 27 آبان 1397, 13:23 عصر
سلام به همه اساتید گرامی دوستان من تو پروژه ای که با زبان سی شارپ نوشتم از thread های زیادی استفاده کرده ام که این thread ها دستوراتی هستند که داخل حلقه while تکرار می شوند از آنجایی که میزان مصرف سی پی یو به ۱۰۰ درصد می رسد لذا برنامه بسته می شود ، برای حل این مشکل ممنون میشم راه حل مناسبی پیشنهااد بدید یا اگر تکنولوژی جدیدی برای اینکار تعریف شده ممنون میشم معرفی نمایید

اگر تمامی نخ ها باید باهم کار کنند که اصلا خوب نیست که برای هر فرآیند یک نخ ایجاد کردید!
بهتره که از حوضچه های نخ و تکنیکهای همزمانی استفاده کنید تا خود همون حوضچه های نخ کار کنترل Timing های پردازشگر را در جهت رعایت حق تقدم اجرای نخ ها به عهده بگیرند و اینطوری دیگه تمام هسته های پردازشگر فقط در گیر نخ ها پروسس ها شما نخواهند بود. البته در زمان استفاده از نخ ها به راحتی می تونید با حداکثر توان هسته های پردازشگر ویا به صورت عادلانه توان هسته ها را برای برنامه تون در اختیار بگیرید.
برای اجرای پروسس های طولانی و در حلقه های تکرار استفاده از Thread به تنهایی کار عاقلانه ای نیست و بازدهی را هم به شدت تحت تاثیر قرار میده.
البته می تونید از کتابخانه های قدرتمندی مانند TPL & PLINK استفاده کنید که اونوقت خواهید دید که به چه سرعت وکیفیتی می تونید همزمانی را نخ ها اجرا کنید حتی نگران مسایل بسیار پیچیده Race Condition و ... در هنگام همزمانی در نخ ها هم نباشید.

farhad_shiri_ex
یک شنبه 27 آبان 1397, 13:28 عصر
سلام. اگر حلقه while کار سنگینی انجام نمیدهد. از دستور sleep استفاده نمایید. به شدت مصرف سی پی یو رو پایین میاره

دوست عزیز یعنی چی ! بین دستوراتی که دارند اجرا میشن تو حلقه به نخ بگه که مثلا چند میلی صبر کنه که مثلا مصرف سی پی یو پایین بیاد! یعنی منظورتون این هست که با این کار باعث میشه که عمل Timing , marshaling , ... در پردازشگر به پردازه های دیگه انتقال پیدا میکنه! مگه داریم شاید هم من به این تکنیک آشنایی ندارم در صورت امکان یکم توضیح راجع به این روش نوشتن sleep تو نخ ها می فرمایید!
البته تا اونجایی که میدونم کلا کار دستور sleep چیز دیگه ای هست در ناحیه های اشتراکی و قفل گذاری می تونه کاربرد داشته باشه که اونهم در حال حاضر خیلی وقته که منسوخ شده اونهم به علت وجود کتابخانه های قدرتمندی مثل TPL و ...

arastoahmadi
یک شنبه 27 آبان 1397, 13:52 عصر
ممنون از پاسختون ، دوستان یه مثال از کار با tpl و plink برام می زارید ممنون میشم راهنمایی کنید

farhad_shiri_ex
یک شنبه 27 آبان 1397, 16:09 عصر
ممنون از پاسختون ، دوستان یه مثال از کار با tpl و plink برام می زارید ممنون میشم راهنمایی کنید

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