У цій статті ми розберемося з моделлю багатопоточності в операційній системі.
Багатопотокова модель:
Багатопотоковість дозволяє програмі розділити своє завдання на окремі потоки. У багатопотоковому режимі один і той самий процес або завдання можна виконати за допомогою кількості потоків, або ми можемо сказати, що в багатопоточному режимі існує більше одного потоку для виконання завдання. З використанням багатопоточності можна досягти багатозадачності.
як роздрукувати java
Основним недоліком однопотокових систем є те, що одночасно може виконуватися лише одне завдання, тому, щоб подолати недолік цього єдиного потоку, існує багатопотоковість, яка дозволяє виконувати кілька завдань.
Наприклад:
У наведеному вище прикладі client1, client2 і client3 звертаються до веб-сервера без очікування. У багатопоточності кілька завдань можуть виконуватися одночасно.
В операційній системі потоки поділяються на потік рівня користувача та потік рівня ядра. Потоки на рівні користувача обробляли незалежну форму над ядром і, отже, керували без будь-якої підтримки ядра. З іншого боку, операційна система безпосередньо керує потоками на рівні ядра. Тим не менш, між потоками на рівні користувача та рівня ядра має існувати певна форма зв’язку.
Існує три встановлені багатопотокові моделі, які класифікують ці відносини:
- Багатопотокова модель багато до одного
- Багатопотокова модель один до одного
- Багатопотокові моделі від багатьох до багатьох
Багатопотокова модель «Багато до одного»:
Модель багато до одного відображає багато потоків рівнів користувача в один потік ядра. Цей тип зв’язку сприяє створенню ефективного середовища перемикання контексту, легко реалізованого навіть на простому ядрі без підтримки потоку.
веб-сервіси Java
Недоліком цієї моделі є те, що оскільки в будь-який момент часу існує лише один розклад потоків на рівні ядра, ця модель не може скористатися перевагами апаратного прискорення, яке пропонують багатопотокові процеси або багатопроцесорні системи. У цьому випадку все керування потоками здійснюється в просторі користувача. Якщо відбувається блокування, ця модель блокує всю систему.
На наведеному вище малюнку модель «багато до одного» пов’язує всі потоки рівня користувача з одним потоком рівня ядра.
Багатопотокова модель один до одного
Модель «один-до-одного» відображає один потік на рівні користувача на один потік на рівні ядра. Цей тип зв’язку полегшує паралельну роботу кількох потоків. Однак ця перевага має свій недолік. Створення кожного нового потоку користувача має включати створення відповідного потоку ядра, що спричиняє накладні витрати, які можуть перешкоджати продуктивності батьківського процесу. Операційні системи серії Windows і Linux намагаються вирішити цю проблему, обмежуючи зростання кількості потоків.
На наведеному вище малюнку одна модель пов’язує один потік на рівні користувача з одним потоком на рівні ядра.
що таке const в java
Багатопотокова модель багатопотокової моделі
У цьому типі моделі є кілька потоків на рівні користувача та кілька потоків на рівні ядра. Кількість створених потоків ядра залежить від конкретної програми. Розробник може створити стільки потоків на обох рівнях, але вони можуть бути різними. Модель «від багатьох до багатьох» є компромісом між двома іншими моделями. У цій моделі, якщо будь-який потік здійснює блокуючий системний виклик, ядро може запланувати виконання іншого потоку. Крім того, із запровадженням кількох потоків складності немає, як у попередніх моделях. Незважаючи на те, що ця модель дозволяє створювати кілька потоків ядра, ця модель не може досягти справжнього паралелізму. Це тому, що ядро може планувати лише один процес за раз.
Багато-багато версій багатопоточної моделі пов’язують кілька потоків рівня користувача з однаковими або набагато меншими потоками рівня ядра на малюнку вище.