Page 24 - 6111
P. 24
псевдопаралельного (або паралельного в мультипроцессорній
системі) виконання її окремих частин. Наприклад, якщо електронна
таблиця була розроблена з урахуванням можливостей
багатонитковою обробки, то користувач може запросити
перерахунок свого робочого листа й одночасно продовжувати
заповнювати таблицю. Особливо ефективно можна
використовувати багатонитковість для виконання розподілених
додатків, наприклад, багатонитковий сервер може паралельно
виконувати запити відразу декількох клієнтів.
Нитки, що відносяться до одного процесу, не настільки
ізольовані один від одного, як процеси в традиційній багатозадачній
системі, між ними легко організувати тісну взаємодію. Дійсно, на
відміну від процесів, які належать різним, взагалі кажучи,
конкуруючим додаткам, усі нитки одного процесу завжди належать
одному додатку, тому програміст, що пише це додаток, може
заздалегідь продумати роботу безлічі ниток процесу таким чином,
щоб вони могли взаємодіяти, а не боротися за ресурси.
У традиційних ОС поняття “нитка” тотожно поняттю “процес”.
У дійсності часто буває бажано мати кілька ниток, що розділяють
єдиний адресний простір, але виконуються квазіпараллельно,
завдяки чому нитки стають подібними процесам (за винятком
поділюваного адресного простору).
Нитки іноді називають полегшеними процесами чи міні-
процесами. Дійсно, нитки в багатьох відносинах подібні процесам.
Кожна нитка виконується строго послідовно і має свій власний
програмний лічильник і стік. Нитки, як і процеси, можуть,
наприклад, породжувати нитки-нащадки, можуть переходити зі
стану в стан. Подібно традиційним процесам (тобто процесів, що
складається з однієї нитки), нитки можуть знаходиться в одному з
наступних станів: виконання, очікування і готовність. Поки одна
нитка заблокована, інша нитка того ж процесу може виконуватися.
Нитки розділяють процесор так, як це роблять процеси, у
відповідності з різними варіантами планування.
Однак різні нитки в рамках одного процесу не настільки
незалежні, як окремі процеси. Всі такі нитки мають один і той же
адресний простір. Це означає, що вони поділяють одні й ті ж
глобальні змінні. Оскільки кожна нитка може мати доступ до
кожної віртуальної адреси, одна нитка може використовувати стек
іншої нитки. Між нитками немає повного захисту, тому що, по-
перше, це неможливо, а по-друге, не потрібно. Усі нитки одного
процесу завжди вирішують загальну задачу одного користувача, і
апарат ниток використовується тут для більш швидкого рішення
задачі шляхом її розпаралелювання. При цьому програмісту дуже
23