транскрипт
1 Основи ОС Unix Програмування нитками з використанням POSIX Pthreads Основи ОС Unix Слайд 1 з 34
2 Сьогодні: багатопоточний програмування Що таке нитки (threads) Введення в паралельне програмування Огляд бібліотеки POSIX threads Управління нитками Критичні секції та об'єкти синхронізації мутекс умовні змінні Основи ОС Unix Слайд 2 з 34
if ($ this-> show_pages_images $ Page_num doc [ 'images_node_id'])
5 Порівняння процесу і ниток Основи ОС Unix Слайд 5 з 34
6 Контекст окремої нитки Покажчик стека Регістри CPU Параметри планувальника (пріоритет, політика) Маска сигналів Специфічні дані нитки Основи ОС Unix Слайд 6 з 34
7 Загальна про нитках існують в рамках процесу і використовують ресурси процесу представляють власний потік управління, за умови існування породжує процесу і підтримки від ОС мають свої специфічні ресурси, необхідні для використання планувальником завдань мають загальний доступ до ресурсів процесу при завершенні процесу всі його нитки завершуються це "легковений процес", оскільки породження нитки і перемикання контексту між нитками одного процесу не вимагає перезавантаження таблиць сторінок та ін. Основи ОС Unix Слайд 7 з 34
10 Порівняння fork і pthread_create
11 Загальні проблеми паралельного програмування Вибір моделі паралельного програмування Розпаралелювання завдання Збалансування навантаження на процесори Взаємодія подзадач Взаємозалежність даних Синхронізація доступу і виникнення "умов гонки" (race conditions) Оптимізація використання пам'яті Організація введення / виведення Складність програми тощо. Основи ОС Unix Слайд 11 з 34
12 Паралельне виконання ниток Основи ОС Unix Слайд 12 з 34
13 Які програми підходять для многопоточности? Робота або обробка даних може виконуватися незалежними завданнями одночасно Ймовірно блокування при довгому I / O У певному місці програми використовуються множинні цикли Необхідний відгук на асинхронні події Деякі підзадачі мають підвищений пріоритет Основи ОС Unix Слайд 13 з 34
14 Деякі моделі многопоточности Менеджер / робочий Конвеєр Рівноправність Основи ОС Unix Слайд 14 з 34
15 Модель загальної пам'яті Основи ОС Unix Слайд 15 з 34
16 Питання безпеки ниток (thread safe) Основи ОС Unix Слайд 16 з 34
17 Pthreads API Чи не безкоштовно! Поширюється IEEE, але входять до складу багатьох дистрибутиви Linux Включають групи процедур для управління нитками: породження, перемикання, зв'язування (join), атрибути та ін .; мутекс: управління об'єктами взаємного виключення (mutual exclusions) для синхронізації ниток; умовні змінні: об'єкти взаємодії ниток по взаємно узгодженими умовами і сигналам. Основи ОС Unix Слайд 17 з 34
18 Pthreads API угоду найменування Основи ОС Unix Слайд 18 з 34
19 Управління нитками Основи ОС Unix Слайд 19 з 34
20 Завершення нитки при виконанні return в процедурі при виконанні pthread_exit в процедурі при виклику pthread_cancel в інший нитки при завершенні всього процесу Зауваження: якщо main викликає pthread_exit, то завершется тільки main нитку, інакше весь процес pthread_exit не закриває відкриті файли Основи ОС Unix Слайд 20 з 34
21 Зв'язування ниток (joining) pthread_join блокує дану нитку, поки не завершиться зазначена в параметрах нитку. можна перевірити статус завершення пов'язаної нитки можна зв'язатися тільки з однією ниткою існують інші методи синхронізації: мутекс і умовні змінні Нитка може бути несвязиваемой (detached) Основи ОС Unix Слайд 21 з 34
22 Управління нитками (доп.) ID нитки і атрибути є "прихованими" (opaque) об'єктами отримати ID нитки. pthread_self () порівняти два ID: pthread_equal (thread1, thread2) унікальна процедура ініціалізації: pthread_once (once_control, init_routine) переміщення нитки в чергу планувальника: pthread_yield () Основи ОС Unix Слайд 22 з 34
23 Об'єкти синхронізації mutex (mutual exclusion) мутекс діє як блокування (lock) доступу до загального ресурсу. При спробі блокувати доступ з декількох ниток одночасно гарантується, що тільки одна нитка отримає доступ. condition variable учловная змінна контролює доступ до даних в залежності від їх значення. Дозволяє уникнути програмування циклів перевірки умов. Завжди використовується совметно з мутекс. Основи ОС Unix Слайд 23 з 34
24 Приклад виникнення гонки (race condition)
25 Робота з мутекс створити і ініціалізувати мутекс кілька ниток намагаються захваніть (lock) мутекс тільки одна нитка опановує мутекс, інші блокуються чекаючи його звільнення власник мутекс виконує операції "критичної секції" власник мутекс звільняє мутекс інша нитка захоплює мутекс і т.д. нарешті, мутекс знищується Основи ОС Unix Слайд 25 з 34
26 Робота з умовними змінними Декларація і ініціалізація глобальної змінної (напр. Count) Створення умовної змінної Породження двох ниток Thread 1 Thread 2 Виконується поки задовольняється умова Захоплює мутекс Виклик pthread_cond_wait c автоматичним звільненням мутекс по сигналу з 2, пробуджується і захоплює мутекс Явно звільняє мутекс continue Join / Continue Виконується Захоплює мутекс Змінює значення глобальної змінної, яку очікує 1 прверяется значення глобальної змінної і при задоволенні умови посилає сигнал 1 освоїти няється мутекс Continue Основи ОС Unix Слайд 26 з 34
27 Проблеми планувальника і ниток Алгоритм планувальника для ниток може бути спеціальним, але часто працює звичайний. Pthreads API надають функції, що визначають політику планувальника і пріоритети ниток, які змінюють звичайний алгоритм. Стек і спеціфіцескіе дані нитки видаляються при завершенні нитки, але можуть передаватися іншій нитки. Існують специфічні проблеми управління пріоритетами ниток. Проблеми взиімодействія ниток різних процесів. Спільне використання умовних змінних різними процесами Основи ОС Unix Слайд 27 з 34