Багатозадачність. Потоки виконання (Threads). Основні поняття
Пошук на інших сайтах:
Зміст
- 1. Багатозадачність. Види багатозадачності. Багатозадачність на основі процесів та потоків
- 2. Багатозадачність на основі процесів. Загальні поняття
- 3. Багатозадачність на основі потоків. Поняття потоку виконання
- 4. Загальні відомості про потоки виконання. Багатопотоковість
- 5. Види станів потоків виконання
- 6. Пріоритети потоків. Основні поняття. Випадки перемикання контексту
- 7. Синхронізація потоків. Монітор
- Зв’язані теми
1. Багатозадачність. Види багатозадачності. Багатозадачність на основі процесів та потоків
У сучасних операційних системах реалізовано механізм багатозадачності. З допомогою цього механізму, в операційній системі може одночасно виконуватись декілька програм (задач). Наприклад, можна набирати текст програми на мові Java, яка використовує потоки, та одночасно слухати музику Бетховена.
Розрізняють два види багатозадачності:
- багатозадачність на основі процесів – це засіб паралельного виконання двох або більше програм на комп’ютері;
- багатозадачність на основі потоків – це засіб розпаралелення виконання коду всередині однієї окремої програми (процесу).
Основна перевага використання багатозадачності – зменшення часу очікування на виконання декількох задач. Зменшення часу очікування в сучасних інтерактивних середовищах дозволяє максимально використовувати доступні обчислювальні потужності в системі.
⇑
2. Багатозадачність на основі процесів. Загальні поняття
При використанні багатозадачності на основі процесів, важливим поняттям є процес. Процес – це окрема виконавча програма. Отже, багатозадачність на основі процесів – це засіб паралельного виконання двох або більше програм на комп’ютері. Паралельне виконання забезпечується процесором (декількома процесорами) таким чином, що кожній паралельно-виконуваній програмі виділяється визначений квант часу (ресурсу) процесора. У цьому випадку виконувана програма вважається найменшою одиницею коду.
Наприклад, розробка програми з використанням компілятора мови Java є окремим процесом, на який немає впливу з цієї програми;
Процеси є великими задачами і потребують більше системних ресурсів. Кожному процесу виділяється свій окремий адресний простір. Зв’язок між процесами обмежений та ресурсоємний. Перемикання контексту (зміна активності) між процесами також потребує “великих зусиль” від процесора та операційної системи.
⇑
3. Багатозадачність на основі потоків. Поняття потоку виконання
Багатозадачність на основі потоків ще називають багатопотоковість. При використанні багатопотоковості найменшою одиницею диспетчеризованого коду є потік виконання. Одна програма може виконувати декілька потоків (задач) одночасно. Таким чином, багатозадачність на основі потоків – це засіб розбиття програмного коду на окремі паралельно-виконувані частини.
Наприклад, в текстовому редакторі можна роздруковувати документ одночасно з набором тексту в іншому документі.
Потоки виконання всередині процесів порівняно з процесами потребують набагато менше системних ресурсів. Потоки сумісно використовують єдиний адресний простір одного процесу, в якому вони розпаралелені. Зв’язок та перемикання контексту (зміна активності) між процесами слабо навантажує процесор та операційну систему.
⇑
4. Загальні відомості про потоки виконання. Багатопотоковість
Мова програмування Java містить вбудовані засоби для реалізації багатопотокового програмування. З допомогою цих засобів є можливість керувати так званими потоками виконання.
Виконання кожної програми може бути розбите на декілька потоків. Кожен потік виконання представляє собою окремий шлях виконання програмного коду. Кожен потік виконання створюється в головному потоці і називається дочірнім потоком. Після створення декількох потоків у програмі, головний потік та дочірні потоки:
- можуть тривати різний період часу;
- можуть завершуватись в різні моменти часу. Тут можлива ситуація, коли головний потік завершується до завершення виконання дочірнього потоку.
Для роботи з потоками виконання в мова Java реалізовано потужні бібліотеки класів.
⇑
5. Види станів потоків виконання
Потоки виконання можуть бути в декількох станах:
- потік виконується;
- потік готовий до виконання;
- потік призупинено;
- потік починає виконуватись після його зупинки;
- потік заблокований. Це випадок, коли потік очікує на отримання деякого ресурсу;
- потік перервано. Перерваний потік не може бути відновлений.
⇑
6. Пріоритети потоків. Основні поняття. Випадки перемикання контексту
При використанні потоків виконання виникає поняття пріоритету. Пріоритет – це цілочисельне значення, яке визначає поведінку даного потоку по відношенню до інших потоків. Для декількох потоків числове значення пріоритету задає відносний пріоритет одного потоку над іншими. Якщо виконується тільки один потік, то числова величина пріоритету не має значення. Пріоритет потоку враховується у випадках, коли одночасно виконуються декілька потоків і відбувається так зване перемикання контексту – перехід від одного потоку до іншого.
Перехід від одного потоку до іншого виконується в наступних випадках:
- випадок, коли потік з більшим пріоритетом витісняє виконання потоку з меншим пріоритетом незалежно від того, які операції виконує низькопріоритетний потік. Іншими словами, потік з більшим пріоритетом отримує право на виконання при першій потребі. Цей випадок демонструє так звану витісняючу багатозадачність;
- потік передає керування іншому потоку добровільно. У цьому випадку управління передається іншому потоку, який має найвищий пріоритет серед потоків, що виконуються на даний момент. Якщо добровільно потрібно передати управління потокам з однаковим пріоритетом, то ці потоки по кругу розділяють час центрального процесора.
⇑
7. Синхронізація потоків. Монітор
У багатозадачних середовищах потоки (програми) виконуються асинхронно. Асинхронність визначається хаотичним використанням наявних ресурсів виконуваним потоком.
Для двох (або більше) паралельно виконуваних потоків можуть виникати випадки, коли між ними потрібно організувати синхронізацію. Одним з прикладів необхідності застосування синхронізації, є уникнення конфліктів між потоками за спільно використовувані ресурси. Синхронізація – це механізм взаємодії між двома (або більше) потоками з дотриманням певних правил з метою уникнення колізій, одночасного або неузгодженого використання спільних ресурсів тощо.
Для забезпечення синхронізації у мові Java введено використання так званих моніторів. Монітор – це технологія синхронізації потоків, яка передбачає зберігання тільки одного потоку виконання, якому надаються привілеї доступу до спільного ресурсу. Отже, монітор забезпечує захист ресурсів від їх одночасного використання більш ніж одним потоком виконання.
При використанні технології монітору виникає таке поняття, як “вхід потоку у монітор“. Якщо декільком потокам одночасно потрібно доступитись до спільного ресурсу, то доступ має тільки той потік, який увійшов у монітор. Всі інші потоки очікують до тих пір, поки монітор не звільниться (потік, що ввійшов у монітор не залишить його).
На рисунку 1 наведено приклад роботи монітору для 4-х потоків. Вхід у монітор здійснює Потік 3. Цей потік має доступ до спільного ресурсу. Всі інші потоки очікують в черзі до тих пір, поки Потік 3 не покине монітор.
Рисунок 1. Доступ до спільного ресурсу з використанням монітору
⇑
Зв’язані теми
⇑