Потоки в windows

Поняття пріоритету потоку.

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

Кожному потоку присвоюється рівень пріоритету - від 0 (найнижчий) до 31 (найвищий). Вирішуючи, яким потоку виділити процесорний час, система спочатку розглядає тільки потоки з пріоритетом 31 і підключає їх до процесора за принципом каруселі. Поки в системі є плановані потоки з пріоритетом 31, жоден потік з більш низьким пріоритетом процесорного часу не отримує. Така ситуація називається «голодуванням * (starvation). Вона спостерігається, коли потоки з більш високим пріоритетом так інтенсивно використовують процесорний час, що інші практично не працюють. Імовірність цієї ситуації набагато нижче в багатопроцесорних системах, де потоки з пріоритетами 31 і 30 можуть виконуватися одночасно. Система завжди намагається, щоб процесори були завантажені роботою, і вони простоюють тільки в відсутність планованих потоків.

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

При завантаженні системи створюється особливий потік - потік обнулення сторінок (zero page thread), якому присвоюється нульовий рівень пріоритету. Жоден потік, крім цього, не може мати нульовий рівень пріоритету. Він обнуляє вільні сторінки в оперативній пам'яті при відсутності інших потоків, які потребують уваги з боку системи.

Схожі статті