Farchid
Farchid
خواندن ۳ دقیقه·۳ سال پیش

تفاوت بین پروسه و ترد در چیست ؟!

منبع

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

در بازی های موبایل یا PC اجسامی مثل ماشن،‌کامیون و چیزهای دیگه اینها همگی تردهایی هستند که دارن توی این اپلیکیشن بازی اجرا میشن. یا یه مثال دیگه،‌ مرورگر وب شما یک ترد داره عکس یا ویدیو لود میکنه از اون طرف ترد های دیگه دارن دیتارو میگیرن. بنابراین یک اپلیکیشن ممکنه نیازمند اجرای جندین تسک بصورت پارالل باشه. ترها هم برای همین منظور به کار گرفته میشن برای کارهای موازی.

ترد

یک ترد مجموعه ای از stack, program counter هستش که داخل یک پروسه وجود داره. به عبارتی در پروسه ساکن است.

بنابراین تردها نمیتونند خارج از پروسه ها وجود داشته باشند. همچنین هر ترد مختص دقیقا یک پروسه است.

اطلاعاتی مثل code segment, files, data segment میتونه بین تردهای مختلف share بشه.

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

تردها همچنین به light-weight processes یا پروسه های سبک هم شناخته میشن

شکل بالا بیانگر پروسه سینگل ترد و پروسه مالتی ترد هستش. و همانطوری که ملاحظه میکنین هر ترد registers, stack, counter خودشو داره فقط code, data ,files بصورت مشترک هستش.

انواع تردها

User-Level Thread

  • این نوع ترد توسط کاربران مدیریت میشه و کرنل هیچ خبری ازش نداره
  • این تردها سریع ساخته شده و راحت میدیرت میشن
  • کرنل مدیریتشون میکنه به شرط اینکه پروسه سینگل ترد باشه
  • پیاده سازی که شده با استفاده از user-level libraries بوده و نه با صدا زدن سیستم. هیچ اتفاقی توی سیستم عامل نمی افته وقتیکه کانتکس ترد سوییچ میشه.
  • هر پروسه جدول اختصاصی ترد خودشو داره برای track کردن ترد ها

Kernel-Level Thread

  • کرنل درمورد ترد اطلاع داره و توسط OS هم ساپورت میشه
  • تردها با صدا زدن سیستم ساخته و مورد استفاهده قرار میگیرند.
  • جدول ترد برای هر پروسه دیگه اینجا مطرح نیست و کرنل هستش که این جدول نگهداری میکنه برای Track کردن ترد های موجود در سیستم
  • در مقایسه با نوه user-level thread این نوع کند تر ساخته و مدیریت میشود.

مزیت تردها

۱− عملکرد: ترد ها در کل عملکرد یک برنامه بهبود می بخشه

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

۳− معماری مصرف چندین پردازشگر (Utilization of Multiple Processor Architecture)

تردهای گوناگون میتونن بر روی چندین پردازشگر اجرا بشن. بنابراین، کارایی پردازشگر بهتر خواهد شد

۴− کاهش زمان Context Switching

تردها زمان کانتکس سوییچینگ کم میکنن و فضای حافظه مجازی همان مقدار باقی میمونه

۵− همروندی: تردها همروندی در یک پروسه آسان کرده اند

۶− برنامه نویسی با تکنیک های پارالل خیلی آسان تر پیاده سازی میشن

فرق بین پروسه و ترد

۱− پروسه یعنی برنامه ای که در حال حاضر دارد اجرا میشود، ولی ترد یک موجودیتی است داخل پروسه که میتواند برنامه ریزی شود برای اجرا

۲− پروسه ها زمان بیشتری برای بسته شدن نیاز دارند برعکس تردها زمان خیلی کمتری میبرند.

۳−ساخت یک پروسه زمانبر تر از ساخت یک ترد است

۴− پروسه Context Switching زمان بیشتری میبره تا ترد context switching

۵− ارتباط بین تردها سریع از ارتباط بین پروسه ها است

۶−پروسه ها به Heavy-weight معروفند از اونجایی که منابع بیشتری میبرند. و ترد ها به light-weight معروفند چون منابع را share میکنند.

۷− یک پروسه در یک فضای جداگانه ای در مموری اجرا میشه. ولی تردها در یک فضای مشتری مموری اجرا میشن

۸− پروسه های مختلف copies of data, files and codes مختلفی هم دارند ولی ترد ها share میکنن و یکسان هستند

۹−مثال: باز کردن یک تب در مرورگر مثال عینی ساخت یک پروسه است و باز کردن چندین تب در مرورگر میتواند مثال ساخت ترد باشد.



Threadprogrammingos
un homme normal :)
شاید از این پست‌ها خوشتان بیاید