PDA

View Full Version : thread pool



ARA
سه شنبه 24 بهمن 1385, 16:50 عصر
thread pool مزیت هاش و معیبش ؟؟؟

برای چه کاری مناسب و برای چه کاری نامناسبه


مرسی

Behrouz_Rad
سه شنبه 24 بهمن 1385, 22:15 عصر
چون جای این بحث در سایت خالیه، به نظرم کمی توضیحات اجمالی رو می طلبه.

به جای اینکه هر بار مجبور باشی که یک Thread جدید ایجاد و پس از پایان کار، اون رو حذف کنی، در NET. مفهومی با نام Thread Pool یا همون "مخزن Thread" قرار داده شده که هرگاه نیاز به یک Thread جدید داشتی، این Thread از Thread Pool استخراج بشه.
البته واضح هست که Thread به هر حال در اولین مرتبه باید ایجاد بشه.
هر زمان Thread ای به طور کامل وظیفش رو انجام داد، به جای اینکه Thread حذف بشه، در Thread Pool قرار میگیره تا در مرتبه های بعد بشه از اون استفاده کرد.
برای پیاده سازی این تکنیک از کلاس System.Threading.ThreadPool استفاده میشه.
به طور پیش فرض، 25 Thread میتونن در Thread Pool قرار بگیرن.

استفاده از این تکنیک موجب میشه که هزینه ی سرباری که در اثر ایجاد و حذف Thread ها به برنامه تحمیل میشه به حداقل میزان خودش برسه.
همچنین Thread Pool تمامی اعمال ایجاد، حذف، مدیریت و زمان بندی Thread ها رو به طور خودکار انجام میده و نیازی به درگیر شدن برنامه نویس با جزئیات این اعمال نیست!
و در نهایت اینکه کدنویسی کمتری نیاز هست و چون این کلاس و متدهای اون تست شدن و باگی ندارند، خیال برنامه نویس هم از جانب خطاهای احتمالی راحت هست.

در کنار مزایایی که اشاره کردم، معایبی نیز وجود داره. از جمله اینکه برنامه نویس کنترلی کامل بر وضعیت و اولویت بندی Thread ها نداره و همچنین نمی تونه Thread ها را مشخصه گذاری کنه تا بتونه فعالیت اونها را زیر نظر داشته باشه.
یکی از معایب دیگه این هست که تو نمی تونی تشخیص بدی که یک Task نسبت داده شده به یک Thread در Thread Pool، چه زمان ممکنه انجام بشه! چون ممکنه تمامی Thread های موجود در Thread Pool مشغول و در حال انجام وظایف دیگری باشن!
همچنین تا اونجا که بنده اطلاع دارم، این امکان وجود داره که کدهای برنامه های دیگه بتونن در عملکرد برنامه تاثیر بگذارن!

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

موفق باشید.

Smart User
چهارشنبه 25 بهمن 1385, 00:49 صبح
سلام
میشه یه مثال راجع به ایجاد و نحواه کار با thread ها اینجا بزارید ..
یا یه منبع برای کار با thread ها معرفی کنید
ممنون!!

ARA
چهارشنبه 25 بهمن 1385, 09:49 صبح
معمولا کتابهای برنامه نویسی شبکه یک فصل در مورد thread دارند برای اینکه خیلی از برنامه های کلاینت سروری بصورت multithreading نوشته میشه

به اینجا واسه کتاب سر بزن
http://www.ebooksportal.org

saeedgharedaghi
چهارشنبه 06 فروردین 1393, 11:33 صبح
سلام و خسته نباشید خدمت استاد عزیزم Behrouz_Rad (http://barnamenevis.org/member.php?7945-Behrouz_Rad)
یه سوال داشتم
اینکه ایا در theradpool میتوان به تک تک thread ها دسترسی داشت و مثلا اونها رو Stop کرد یا نه آیا راه حلی وجود دارد برای اینکار یا اینکه از اول تا اخر تعداد thread ها ثابت هست؟
ممنون میشم به این سوالم پاسخ بدین :-)

saeedgharedaghi
پنج شنبه 07 فروردین 1393, 11:26 صبح
از دوستان کسی تا حالا با Thread Pool کار نکرده یعنی ؟؟؟ چرا نمیشه به تک تک Thread ها دسترسی داشت؟؟؟