چندریسمانی کیست؟ توضیح بده.
چندریسمانی (به انگلیسی:Multithreading) توانایی یک برنامه در تقسیم شدن به چند ریسمان (زیربرنامه) است که می‌توانند جداگانه و در عین حال همزمان توسط رایانه اجرا شوند. یک رایانه چندپردازنده‌ای می‌تواند همزمان دو یا چند ریسمان را اجرا کند که به معنی اجرای زودتر کل برنامه نسبت به رایانه تک‌پرداز است. بر روی یک رایانه تک‌پردازنده یک برنامه چند ریسمانی زودتر اجرا نمی‌شود اما یک نرم‌افزار کاربردی چندریسمانی ممکن است با کاربر اندرکنش بیشتری داشته باشد زیرا چندین فعالیت در نرم‌افزار همزمان اجرا می‌شوند. نرم‌افزارهای سنتی تک‌ریسمان‌ای بر روی سیستم‌های چندپردازنده سریع‌تر اجرا نمی‌شوند زیرا ان نرم‌افزارها در هر زمان می‌توانند تنها یک پردازنده را به کار بگیرند. این قابلیت موجب مصرف انرژی برق کمتر نیز می‌شود.زمینه.ریسمان یک واحد اساسی بهره‌گیری از CPU است. یک ریسمان شامل یک شناسه ریسمان، شمارنده برنامه (PC)، یک مجموعه ثبات، و یک پشته است. بخش کد، بخش داده و سایر منابع سیستم عامل مانند پرونده‌های باز و سیگنال‌ها، بین ریسمان‌های متعلق به یک فرایند به اشتراک گذاشته می‌شود. یک فرایند به‌طور مرسوم دارای یک ریسمان کنترل است. اگر فرآیندی دارای چندین ریسمان کنترل باشد، می‌تواند همزمان بیش از یک کار را انجام دهد.اکثر برنامه‌های نرم‌افزاری که روی رایانه‌ها و دستگاه‌های موبایل جدید اجرا می‌شوند چند ریسمانی هستند. یک برنامه معمولاً به شکل یک فرایند جداگانه با چندین ریسمان کنترل اجرا می‌شود. در زیر چند نمونه از برنامه‌های چند ریسمانی را آورده‌ایم:برنامه‌ها همچنین می‌توانند با هدف حداکثر بهره‌گیری از قابلیت پردازش در سیستم‌های چند هسته ای طراحی شوند. چنین برنامه‌هایی می‌توانند چندین کار پردازنده ای سنگین را به‌طور موازی در چندین هسته محاسباتی انجام دهند.در شرایط خاص، ممکن است برای انجام چندین کار مشابه، به یک برنامه واحد نیاز باشد. به عنوان مثال، یک سرور وب درخواست‌های مشتری را برای صفحات وب، تصاویر، صدا و غیره می‌پذیرد. ممکن است چندین (شاید هزاران مشتری) همزمان به یک وب سرور شلوغ دسترسی پیدا کنند. اگر وب سرور به صورت یک فرایند تک ریسمانی سنتی اجرا شود، می‌تواند در هر لحظه فقط به یک خدمت گیرنده سرویس دهد و مشتری مجبور است مدت زمان زیادی منتظر سرویس دهی برای درخواست خود بماند.یک راه حل این است که سرور به شکل یک فرایند اجرا شود که درخواست‌ها را می‌پذیرد. وقتی سرور درخواستی را دریافت می‌کند، فرایند جداگانه ای برای سرویس دهی به آن درخواست ایجاد می‌کند. در حقیقت، این روش ایجاد فرایند معمولاً قبل از رایج شدن ریسمان‌ها، مورد استفاده قرار می‌گرفت. با این وجود، ایجاد فرایند زمان بر است و منابع زیادی را به کار می‌گیرد. اگر فرایند جدید وظایفی شبیه فرایند موجود را انجام می‌دهد، چرا این همه هزینه سربار را متحمل شویم؟ به‌طور کلی استفاده از یک فرایند حاوی چندین ریسمان کارآمدتر است. اگر فرایند سرور وب چند ریسمانی باشد، سرور یک ریسمان جداگانه ایجاد می‌کند که به درخواست‌های مشتریان گوش می‌دهد. هنگامی که درخواستی صورت می‌گیرد، سرور به جای ایجاد فرایندی دیگر، یک ریسمان جدید برای سرویس دهی به درخواست جدید ایجاد می‌کند و مجدداً منتظر درخواست‌های بعدی می‌ماند.اکثر هسته‌های سیستم عامل نیز به‌طور معمول چند ریسمانی هستند. به عنوان مثال، در زمان بوت شدن سیستم در سیستم‌های لینوکس، چندین ریسمان هسته ایجاد می‌شود. هر ریسمان وظیفه خاصی مانند مدیریت دستگاه‌ها، مدیریت حافظه یا مدیریت وقفه را انجام می‌دهد. از دستور ps -ef می‌توان برای نمایش ریسمان‌های هسته در سیستم عامل لینوکس استفاده کرد. بررسی خروجی این دستور، ریسمان هستهٔ kthreadd را (با pid = ۲) نشان می‌دهد، که نقش والد را برای سایر ریسمان‌های هسته ایفا می‌کند.بسیاری از برنامه‌ها نیز می‌توانند از چندین ریسمان، بهره ببرند، از جمله، الگوریتم‌های اساسی مرتب‌سازی، درختان و گراف‌ها. علاوه بر این، برنامه نویسانی که باید مسئله‌های سنگین پردازشی کنونی در داده کاوی، گرافیک و هوش مصنوعی را حل کنند، می‌توانند با طراحی راه حل‌هایی که به‌طور موازی اجرا می‌شوند، از قدرت سیستم‌های چند هسته ای جدید حداکثر استفاده را بکنند.مزایا.مزایای برنامه‌نویسی چند ریسمانی را می‌توان به چهار دسته عمده تقسیم کرد: