PDA

View Full Version : به دست آوردن تعداد نخ ها در برنامه جاری



gigil_Question
سه شنبه 09 آذر 1389, 13:14 عصر
سلام
میخواستم از اساتید سوالی بپرسم :
من توی برنامه به تعدادی که کاربر نیاز داشته باشه نخ ایجاد میکنم و هر کدوم وظایفی دارند
حالا چه جوری میتونم تعداد نخ های فعال رو به دست بیارم ؟
و یه سوال دیگه:
آیا نباید سرعت برنامه در زمان استفاده از 1 نخ و زمانی که مثلا 5 نخ داریم که وظیفه مشترکی رو دارند فرق داشته باشه ؟
من احساس میکنم فرقی نداره و ابزار درستی برای گرفتن سرعت اجرا نمیشناسم

Parham.D
سه شنبه 09 آذر 1389, 14:31 عصر
سلام.

در Debug Toolbar آخرین دکمه حاوی یک لیست از امکانات هست، که یکی از آنها نخها هست. چک کن شاید به دردت بخوره.

gigil_Question
سه شنبه 09 آذر 1389, 14:45 عصر
من یه چیزو یادم رفت بگم
از backGroundWorker میکنم



سلام.

در Debug Toolbar آخرین دکمه حاوی یک لیست از امکانات هست، که یکی از آنها نخها هست. چک کن شاید به دردت بخوره.

ممنون ولی من متوجه منظورتون نشدم

Felony
سه شنبه 09 آذر 1389, 17:13 عصر
آیا نباید سرعت برنامه در زمان استفاده از 1 نخ و زمانی که مثلا 5 نخ داریم که وظیفه مشترکی رو دارند فرق داشته باشه ؟
من احساس میکنم فرقی نداره و ابزار درستی برای گرفتن سرعت اجرا نمیشناسم

وظیفه مشتزک یعنی چی ؟

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

- یه موقع هست مثلا میخوای لیست تمام فایل های موجود تو یک درایو رو بگیری و برای اینکه سرعت کار بالا بره این کار رو به 2 تا Thread تقسیم میکنی ، مثلا Thread اولی لیست پوشه های موجود تو آدرس جاری رو میگیره و پاس میده به Thread دوم و این Thread لیست فایل ها و زیر پوشه های موجود تو این آدرس رو که از Thread اول دریافت کرده رو میگیره ، فایل ها رو به لیست اضافه میکنه و پوشه ها رو همزمان به Thread اول میده تا زیرپوشه های اونها هم پیدا بشه ، Thread اول هم همزمان پوشه ها رو پیدا میکنه و آدرسشون رو به Thread دوم میده تا این Thread فایلهاشون رو پیدا کنه ، این کار تا پیدا شدن همه فایل ها ادامه داره ، با این کار یه کار که داشت تو یک Thread اجرا میشد به 2 کار مجزا تقسیم کردید که هر دو همزمان انجام میشن ، در اینگونه مواقع باید از Thread انتظار افزایش سرعت رو داشته باشید .

زمانی باید انتظار بالا رفتن سرعت رو داشته باشید که برنامتون رو به شیوه درستی تقسیم بندی کرده باشید و Thread ها به صورت درستی با هم تعامل داشته باشن تا باری که تا قبل از این بر دوش یه Thread بود بین چند Thread به اشتراک گذاشته بشه تا سرعت بیشتر بشه .

در ضمن استفاده از Thread ها یکسری اصول و ریزه کاری داره که شما برای بهتر کار کردن با اونها باید بدونی سیستم عامل مقصد چه طور با Thread ها رفتار میکنه و اونها رو مدیریت میکنه ، با اضافه کردن یک یا چند Thread به برنامه نباید انتظار معجزه داشته باشید .

gigil_Question
سه شنبه 09 آذر 1389, 20:00 عصر
هر چی دنبال دکمه تشکر گشتم پیداش نکردم !!!
از آقا مجتبی به خاطر توضیح خوب و باحوصله شون تشکر میکنم
کار من به این شکله :
شما فرض کن 1000 تا فایل هست که باید یه کاری روش انجام بشه (مثلا محتویاتش خونده بشه و در dataBase ذخیره بشه)
حالا به نظر شما اگه این 1000 تا فایل رو به 5 نخ بدم نباید سرعتش بیشتر بشه ؟
بعد از خوندن توضیحات شما که دارم فکر میکنم شایدم نباید انتظار داشت سرعتش بیشتر بشه!!!
نظر دوستان چیه ؟

Felony
سه شنبه 09 آذر 1389, 21:08 عصر
هر چی دنبال دکمه تشکر گشتم پیداش نکردم !!!
از آقا مجتبی به خاطر توضیح خوب و باحوصله شون تشکر میکنم
کار من به این شکله :
شما فرض کن 1000 تا فایل هست که باید یه کاری روش انجام بشه (مثلا محتویاتش خونده بشه و در dataBase ذخیره بشه)
حالا به نظر شما اگه این 1000 تا فایل رو به 5 نخ بدم نباید سرعتش بیشتر بشه ؟
بعد از خوندن توضیحات شما که دارم فکر میکنم شایدم نباید انتظار داشت سرعتش بیشتر بشه!!!
نظر دوستان چیه ؟

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

البته راه هایی هم برای حل این مسائل هست ولی همونطور که تو پست قبلیم گفتم نیاز به این هست که با Tread ها و نحوه رفتار سیتم عامل با اونها به صورت کامل آشنا باشید .