ریسه (رایانه)

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو
Multithreaded process-fa.svg

در علوم رایانه، اجرای یک ریسه اجرایی یا رشته اجرایی (به انگلیسی: Thread) کوچترین توالی از دستورالعمل‌های برنامه‌ریزی شده است که زمان‌بند سیستم‌عامل می‌تواند آنها را به شکل مستقل مدیریت کند. یک ریسه، یک فرایند سبک وزن است. پیاده‌سازی ریسه‌ها و فرایندها از یک سیستم‌عامل به سیستم‌عامل دیگر متفاوت است اما در اکثر موارد، ریسه در داخل یک فرایند قرار می‌گیرد. چندیدن ریسه می‌توانند در داخل یک فرایند یکسان قرار داشته باشند و منابع (مثل حافظه) را در میان خود به اشتراک بگذارند در صورتی که فرایندهای متفاوت این منابع را به اشتراک نمی گذارند.به ویژه اینکه، ریسه در یک فرایند دستورالعمل (کد قابل اجرا) و متن خود (ارزش هر متغیر در هر لحظه معین) را به اشتراک می گذارد.

در سیستم تک پردازنده ای ، چندریسمانی به صورت عمده توسط تقسیم-زمانی چندگانه (به انگلیسی: time-division multiplexing) به صورت برنامه چندکاره اجرا می شود و واحد پردازش مرکزی (CPU) در بین ریسه های نرم افزاری متفاوت تعویض می شود. این تعویض زمینه به گونه ای اجرا می شود که کاربر تصور می کند ریسه ها یا وظایف؛ همزمان اجرا می شوند. در سیستم های چند پردازنده‌ای یا چندهسته ای، ریسه ها می توانند به صورت جداگانه و همزمان توسط هر کدام از پردازندها یا هسته ها اجرا شوند. در حالت چندپردازنده ای، سیستم عامل ممکن است از ریسمان های سخت افزار که برای بهره برداری بهتر از پردازنده ی مرکزی؛ در پشتیبان سخت افزار موجود است استفاده کند و این حالت با ریسمان های نرم افزاری که به طور کامل توسط نرم افزار بدون دخالت پردازنده مرکزی ساخته می شوند؛ متفاوت است.

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

برنامه ها می توانند ریسمان های فضای کاربر را برای ایجاد وقفه در عملکرد خود توسط زمانسنج ، ارسال سیگنال و یا روش های دیگر استفاده کنند. به طور مثال اد هوک و قبضه‌کردن از این دسته اند.

ریسمان ها در مقابل فرایندها[ویرایش]

ریسمان ها با چندکارگیپردازش رایانه سنتی؛ در موارد زیر تفاوت دارند:

  • فرایندها عمدتاً مستقل هستند، در حالیکه ریسمان ها به صورت زیرمجموعه هایی از فرایند به حساب می آیند.
  • فرایندها به نسبت ریسمان ها اطلاعات بیشتری را حمل می کنند، با در نظر گرفتن اینکه چندین ریسمان در یک فرایند حالت های فرایند را به خوبی حافظه و دیگر منابع به اشتراک می گذارند.
  • فرایند دارای چندین فضای آدرس مجزا است، که ریسمان ها این فضای آدرس ها را به اشتراک می گذارند.
  • فرایند تنها برروی سیتم های ارائه کننده ی ماشین های ارتباط بین پردازشی اثر متقابل می گذارد.
  • تعویض زمینه در بین ریسه ها در یک فرایند عموماً سریع تر از تعویض زمینه در بین فرایندها است.

سیستم هایی مانند ویندوز ان‌تی (به انگلیسی: Windows NT) و اواس/۲ (به انگلیسی: OS/2) به عنوان سیستم هایی با ریسمان های ارزان و فرایندهای گران شناخته شده اند؛ در سیستم عامل های دیگر تفاوت زیادی به جز درهزینه ی فضای آدرس وجود ندارد.

چند ریسمانی[ویرایش]

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

برنامه های کاربردی چندریسمانی مزیت های زیر را دارا هستند:

  • پاسخدهی: در برنامه های تک ریسه ای، اگر ریسه ی اجرایی اصلی در اجرای یک وظیفه ی طولانی مسدود شود، تمام برنامه کاربردی می تواند متوقف شود. با انتقال این وظیفه ی طولانی مدت به ریسه ی کارگر که یکجا با ریسه ی اجرایی اصلی فعالیت می کند، این امکان وجود دارد که برنامه کاربردی بتواند به ورودی پاسخگو باشد در حالی که وظیفه اجرایی در پس زمینه اجرا می شود. به عبارت دیگر، در بسیاری حالات چندریسمانی بودن تنها راه برای پاسخگو نگه داشتن برنامه کاربردی نیست، به وسیله ی ورودی و خروجی غیرد همزمان و یا سیگنال‌های یونیکس امکان دستیابی به نتیجه مشابه وجود دارد.
  • اجرای سریعتر: این مزیت چندریسمانی به برنامه اجازه می دهد که در سیستم رایانه هایی که دارای چندین پردازنده و یا پردازنده های چندهسته ای هستند؛ سرعت عملکرد را افزایش دهد، یا از ماشین پردازش خوشه‌ای بگذرد؛ زیرا به طور طبیعی ریسمان های یک برنامه در همرندی اجرا خود را قرض می دهند.
  • مصرف منابع کمتر: با استفاده از ریسمان ها، یک برنامه کاربردی می تواند به طور همزمان به چندین مشتری خدمات دهد و از منابع کمتری نسبت به زمانی که مجبور به کپی کردن فرایند است؛ استفاده کند. برای مثال وب‌سرور آپاچی، که از مخرنی از شنونده و ریسمان های سرور برای گوش دادن به درخواست های ورودی و پردازش این درخواست ها استفاده می کند.
  • ساده سازی اشتراک و ارتباطات: برخلاف فرایندها، که نیازمند ارسال پیام یا اشتراک حافظه برای اجرای ارتباط بین پردازشی هستند، ارتباطات در بین ریسمان ها بسیار ساده است. ریسمان ها به طور خودکار داده ها را به اشتراک می گذارند، کد و فایل ها و ... ، ارتباطات به طور وسیع ساده سازی شده اند.
  • موازی کردن: برنامه های کاربردی به دنبال بهربرداری از سیستم های چندهسته ای و چندپردازنده ای که توانایی استفاده از چندریسمانی برای تقسیم داده ها و وظایف در ریز-وظایف موازی را دارند؛ هستند. هر کدام از این وظایف در یک هسته جدا و یا به صورت موازی در چندین هسته اجرا می شود. واحد پردازش گرافیکی محیط های محاسباتی مانند کودا و اوپن‌سی‌ال از مدل چندرریسمانی استفاده می کنند که صدها هزار از این ریسمان ها به طورت موازی در تعداد زیادی هسته اجرا می شوند.

چندریسمانی معایب زیر را دارد:

  • همگام‌سازی: از آنجاییکه آنها از فضای آدرسی مشترکی استفاده می کنند، برنامه‌نویس باید مراقب وضعیت رقابتی و دیگر عملکردهای غیربصری باشد. برای اینکه داده ها به طور صحیح اداره شوند، ریسه ها اغلب نیاز به یک وعده گاه در زمان اجرای فرایند داده دارند. همچنین ممکن است ریسمان ها نیازمند انحصار متقابل عملیات ها باشند (که اغلب از نشان‌بر استفاده می شود) تا از تغییر داده های مشترک که به طور همزمان خوانده می شوند جلوگیری شود. بی دقتی در استفاده از این نکات ابتدایی ممکن است موجب بن‌بست شود.
  • ریسه فرایند را خراب می کند: یک عملیات غیرقانونی اجرا شده توسط یک ریسه تمام فرایند را خراب می کند، یک رفتار نادرست از ریسه می تواند تمام پردازش های باقی ریسمان ها در برنامه را مختل کند.

زمان بندی[ویرایش]

زمان بندی ریسمان های سیستم عامل در یکی از دو راه:

  1. چندوظیفه ای انحصاری عمدتاً دیگاه برتری را مطرح می کند، به گونه ای که اجازه می دهد سیتسم عامل تعیین کند که چه زمانی تعویض زمینه رخ می دهد. شرایط نامساعد برای چندریسمانی انحصاری این است که سیستم ممکن است تعویض زمینه در زمان نامناسب داشته باشد، که موجب معکوس کردن اولویت و یا اثرات منفی دیگر می شود.
  2. چندریسمانی تعاونی، به عبارت دیگر، اعتماد کردن به ریسمان ها برای رهاسازی کنترل؛ زمانی که در لحظه توقف قرار دارند است. اگر ریسه برای منبعی تا زمان آماده سازی آن منتظر بماند می توان ایجاد مشکل کند.

ریسمان هایی که وظایف را فراخوانی می کنند، ابتدا در عملکرد چندبرنامه ای OS/360 با تعداد متغیری از وظایف در ۱۹۶۷ ظاهر شدند.

تا اواخر دهه ی ۱۹۸۰، پردازنده ها در رایانه های رومیزی پشتیبانی زیادی از چندریسمانی نمی کردند، اگرچه ریسمان ها هنوز هم در آن رایانه ها استفاده می شد زیرا جابه جایی بین ریسمان ها بسیار سریعتر از تعویض زمینه ی کل فرایند بود. در اواخر دهه ی ۱۹۹۰، ایده ی اجرای دستور توسط چندین ریسه به طور همزمان، با نام چندریسمانی همزمان(به انگلیسی: simultaneous multithreading) شناخته شد، که رایانه های رومیزی با پردازنده های اینتلپنتیوم ۴ تحت عنوان فراریسمانی (به انگلیسی: hyper-threading) به آن دست یافتند. این طراحی در معماری اینتل کور و اینتل کور۲ کمی افت کرد، اما دوباره در معماری پردازنده های کور ای ۷ و برخی از کور ای ۳ و ۵ برقرار شد.

جستارهای وابسته[ویرایش]

منابع[ویرایش]

  • مشارکت‌کنندگان ویکی‌پدیا، «Thread (computing)»، ویکی‌پدیای انگلیسی، دانشنامهٔ آزاد (بازیابی در ۳۱ مرداد ۱۳۹۲).