PDA

مشاهده نسخه کامل : تفاوت ریسمان های ForeGround با BackGround



life24
13-03-13, 15:35
سلام

فرق ریسمان های Foreground با Background در چیست؟
با تشکر

ravegoat
13-03-13, 19:24
سلام!

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

موفق باشید
آرمین:give_rose:

life24
14-03-13, 10:37
سلام
ببخشید منظور از بسته شدن برنامه چیست؟ خوب وقتی برنامه بسته بشه اما ترد خاتمه پیدا نکنه چه فایده؟
من راستش نگرفتم درست. :1. (27):

ravegoat
14-03-13, 11:00
سلام!

بسته شدن برنامه به این معنا است که روی فرم اصلی برنامه روی ضربدر Close کلیک کنید.
اگر یک Foreground Thread مربوط به فرم اصلی در حال اجرا باشه و شما در این حالت فرم اصلی رو Close کنید، فرم بسته میشه ولی اگر Task Manager رو باز کنید می بینید همچنان پروسه ی برنامه در حافظه مقیم و در حال فعالیت هست.

و یه نمونه از فایده اش...
در نرم افزار های تجاری و مالی که نیازه پردازش های به روز رسانی پایگاه داده ی مالی به طور کامل انجام بشه از Foreground Thread استفاده می کنن. در این صورت اگر کاربری برنامه ی مدیریت مالی رو اشتباهی ببنده گرچه فرم برنامه بسته میشه ولی فرآیند به روز رسانی که خیلی مهمه خاتمه پیدا نمی کنه. در این حالت فرآیند برنامه زمانی پایان می پذیره که کار به روزرسانی تموم بشه. در نظر داشته باشید که اگر از Background Thread استفاده می کردیم با بسته شدن فرم اصلی، فرآیند به روزرسانی هم ممکن بود ناتمام باقی بمونه و سبب مشکلات جدی بشه.

موفق باشید
آرمین:give_rose:

life24
15-03-13, 10:55
سلام
زحمت کشیدی متوجه شدم.
اما من برای تست 60 ترد ایجاد کردم اما در Task Manager ویندوز هیچ تردی ای اضافه نشد . الان 980 ترد هست . 60 تا هم ایجاد میکنم تغیر نمی کند.

ravegoat
15-03-13, 15:16
بعید می دونم...
نکته ی اول اینه که مقدار ریسمان های جاری سیستم عامل اصلا" مقدار ثابتی نیست و در کسری از ثانیه تغییر می کنه. به عبارتی به دلیل سر و کار داشتن فرآیند های مختلف به خصوص فرآیند های سیستمی با منابع مختلف ، تعداد ریسمان دائما" تغییر می کنه.

نکته بعدی اینه که خود برنامه اگر به طور دستی بهش ریسمانی اضافه نشده باشه بسته به ساختارش چندین ریسمان رو اجرا می کنه. در نتیجه شما حتی اگر ریسمانی رو اضافه نکرده باشید، با اجرای خود برنامه باید تعداد ریسمان ها تغییر بکنه.

بنده شخصا" با افزایش تعداد ریسمان های یک برنامه ی آزمایشی، چندین ثانیه بعد شاهد افزایش تعداد Thread های اون برنامه در ابزار Resource Monitor ویندوز بودم و اصلا" با پدیده ای که شما توصیف می کنید رو به رو نشدم.