Багатопотоковість або багатонитковість (англ.multithreading) — властивість операційної системи або застосунку, яка полягає в тому, що процес, породжений в операційній системі, може складатися з кількох потоків, що виконуються паралельно, або навіть одночасно на багатопроцесорних системах. При виконанні деяких завдань таке розділення може досягти ефективнішого використання ресурсів комп'ютера. Такі процеси виконання ще називають потоками.
Суттю багатопотоковості є квазі-багатозадачність на рівні одного виконуваного процесу, тобто всі потоки виконуються в адресному просторі процесу. Окрім цього, всі потоки процесу мають не тільки спільний адресний простір, але і спільні дескриптори файлів. Процес, що виконується, має як мінімум один (головний) потік.
Багатонитковість (як доктрину програмування) не слід плутати ані з багатозадачністю, ані з багатопроцесорністю, не зважаючи на те, що операційні системи, що реалізовують багатозадачність, як правило реалізують і багатонитковість.
Переваги
Переваги багатонитковості наступні:
спрощення програми в деяких випадках, за рахунок використання загального адресного простору;
менші відносно процесу часові витрати на створення нитки і взаємодію між нитками;
підвищення продуктивності процесу за рахунок розпаралелювання процесорних обчислень і операцій вводу/виводу.
Кожен процес має таблицю потоків, аналогічну таблиці процесів ядра.
Переваги цього типу наступні:
можливість реалізації на ядрі, що не підтримує багатопотоковість;
швидше переключення, створення і завершення потоків;
процес може мати власний алгоритм планування.
Недоліки:
відсутність переривання по таймеру усередині одного процесу;
при використанні блокуючого системного запиту решта всіх потоків блокується;
відсутній виграш у швидкодії на багато-процесорних системах;
складність реалізації.
Потік в просторі ядра
Разом з таблицею процесів в просторі ядра є таблиця потоків.
Змішана реалізація
Нитки працюють в режимі користувача, але при системних викликах перемикаються в режим ядра. Перемикання в режим ядра і назад є ресурсоємною операцією і негативно позначається на продуктивності системи. Тому було введено поняття волокна — полегшеної нитки, що виконується виключно в режимі користувача. В кожної нитці може бути декілька волокон. Подібний тип багатонитковості реалізований в ОСWindows.
Види взаємодій потоків
У багатопотоковому середовищі часто виникають задачі, пов'язані з використанням паралельними виконуваними потоками одних і тих же даних або пристроїв. Для вирішення подібних проблем використовуються такі методи взаємодії потоків, як взаємовиключення (м'ютекси), семафори, критичні секції і події.
взаємовиключення (mutex, м'ютекс) — це об'єкт синхронізації, який встановлюється в особливий сигнальний стан, коли не зайнятий якимось потоком. Тільки один потік володіє цим об'єктом у будь-який момент часу, звідси і назва таких об'єктів (від англійського mutually exclusive access — взаємно виключний доступ) — одночасний доступ до загального ресурсу виключається. Після всіх необхідних дій м'ютекс звільняється потоком, надаючи іншим потокам доступ до загального ресурсу.
Семафори - є доступні ресурси, які можуть займатися кількома потоками в один і той же час, поки обсяг ресурсів не спустіє. Тоді додаткові потоки повинні чекати, поки необхідна кількість ресурсів не буде знову доступна. Семафори дуже ефективні, оскільки вони дозволяють одночасний доступ до ресурсів.
Події. Події корисні в тих випадках, коли необхідно послати повідомлення потоку, що відбулася певна подія. Наприклад, при асинхронних операціях вводу/виводу з одного пристрою, система встановлює подію в сигнальний стан коли закінчується якась з цих операцій. Один потік може використовувати кілька різних подій в декількох операціях, що перекриваються, а потім чекати приходу сигналу від будь-якого з них.
Критичні секції забезпечують синхронізацію подібно м'ютексам за винятком того, що об'єкти, що представляють критичні секції, доступні в межах одного процесу. Події, м'ютекси і семафори також можна використовувати в однопроцесному застосунку, проте критичні секції забезпечують швидший і ефективніший механізм синхронізації взаємного виключення.