ریسمان (رایانش)

[انگشتی|چپ|یک فرایند با دو ریسمان اجرایی، که روی یک [پردازنده (رایانش)|پردازنده اجرا شده‌اند.]]
[بندانگشتی|400x400پیکسل|[برنامه (رایانه)|برنامه دربرابر پردازه دربرابر ریسمان زمان‌بندی، پیش‌اجرایی، تعویض زمینه]]
یک **ریسمان اجرایی** یا **نخ اجرایی**  در علوم رایانه، «کوچترین توالی» از دستورالعمل‌های برنامه‌ریزی شده‌است که توسط یک زمان‌بند می‌تواند مستقلاً مدیریت گردد، این زمان‌بند معمولاً جزئی از سیستم‌عامل است. پیاده‌سازی ریسمان‌ها و فرایندها از یک سیستم‌عامل به سیستم‌عامل دیگر متفاوت است اما در اکثر موارد، ریسمان یک مولفه از فرایند است. چندین ریسمان می‌توانند در داخل یک فرایند یکسان قرار داشته باشند، که به صورت هم‌روند اجرا می‌شوند و منابعی (مثل حافظه) را در میان خود به اشتراک می‌گذارند، اما فرایندهای متفاوت، این منابع را به اشتراک نمی‌گذارند. ریسمان‌های یک فرایند، مخصوصا «کد اجرایی‌شان»، «مقادیر متغیرهای با انتساب پویا»، و «متغیرهای سراسری ریسمان‌ی محلی» را، در هر زمان، به اشتراک می‌گذارند.

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

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

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

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

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

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

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

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

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

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

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

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

## جستارهای وابسته
* چندکارگی (رایانه)
* پردازنده چندهسته‌ای
* چندریسمانی
* چندریسمانی همزمان
* فراریسمانی

## منابع

* 

رده:رایانش همروند
رده:ریسه‌ها (رایانش)
رده:فناوری‌های سیستم‌عامل