Потоки в операційній системі

У звичайних операційних системах процес визначається відповідним адресним простором та одиночним керуючим потоком. Але часто зустрічаються ситуації, коли в одному адресному просторі добре мати кілька квазіпаралельних керуючих процесів. Модель процесу базується на двох незалежних концепціях: групування ресурсів та виконання програми. Коли їх поділяють, з'являється таке поняття, як потоки.

Процеси можна розглядати як потоки виконуваних команд. Потік має лічильник команд, який відстежує порядок виконання дій. Потік має регістри, у яких зберігаються поточні змінні. Він має стек, що містить протокол виконання процесу, де на кожну викликану процедуру відведена окрема структура. Хоча потік протікає всередині процесу, слід розрізняти концепції потоку та процесу. Процеси використовуються для групування ресурсів, а потоки є об'єктами, які по черзі виконуються на центральному процесорі.

Потоки додають до моделі процесу можливість одночасного виконання в одному і тому ж середовищі процесу декількох досить незалежних програм

Потоки додають до моделі процесу можливість одночасного виконання в одному і тому ж середовищі процесу декількох досить незалежних програм. Декілька потоків, що працюють паралельно в одному процесі, аналогічні кільком процесам, що йдуть паралельно на одному комп'ютері. У першому випадку потоки поділяють адресний простір, відкриті файли та інші ресурси. У другому – процеси спільно користуються фізичною пам'яттю, дисками, принтерами та іншими ресурсами.

Потоки мають деякі властивості процесів, тому їх іноді називають спрощеними процесами. Термін багатопоточність також використовується для опису використання кількох потоків в одному процесі. При запуску багатопотокового процесу в системі з одним процесором потоки працюють по черзі. Процесор швидко перемикається між потоками, створюючи враження паралельної роботи потоків навіть не на дуже швидкому процесорі. Наприклад, у разі трьох потоків в одному процесі всі потоки працюватимуть паралельно. Кожному потоку буде відповідати віртуальний процесор зі швидкодією, що дорівнює одній третині швидкодії реального процесора.

Чому ж потоки такі необхідні? Основною причиною є виконання більшістю додатків великої кількості дій, деякі з них можуть іноді блокуватися. Схему програми можна значно спростити, якщо розбити додаток на кілька послідовних потоків, запущених у квазіпаралельному режимі.

При використанні потоків є також можливість спільного застосування паралельними об'єктами одного адресного простору і всіх даних, що містяться в ньому. Для деяких програм ця можливість є суттєвою. У таких випадках схема паралельних процесів із різними адресними просторами не підходить. На користь потоків працює ще один аргумент - легкість їх створення та знищення, оскільки з потоком не пов'язані ресурси. У більшості систем на створення потоку йде приблизно 100 разів менше часу, ніж створення процесу. Ця властивість особливо корисна за необхідності динамічної та швидкої зміни числа потоків.

Потоки не дають збільшення продуктивності, якщо вони обмежені можливостями процесора. Але коли є одночасна потреба у виконанні великого обсягу обчислень та операцій вводу-виводу, наявність потоків дозволяє поєднувати ці процедури в часі, збільшуючи тим самим загальну швидкість роботи програми.

Інструменти