Министерство образования и науки Российской Федерации
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ, МЕХАНИКИ И ОПТИКИ
П.С. Алексеев
МНОГОПОТОЧНОЕ ПРОГРАММИРОВАНИЕ
Учебное пособие
Санкт-Петербург
2010
Содержание Содержание 2
Введение 8
1 Введение в многопоточное программирование 10
1.1 Классификация параллельных аппаратных архитектур по Флинну 10
1.1 Характеристики последовательных программ 13
1.2 Характеристики параллельных программ 14
1.3 Особенности разработки параллельных программ 15
1.2 Понятия процессов и потоков. Основные определения 16
1.3 Переключение задач в многозадачных ОС. Многозадачность 22
2 Аппаратная поддержка многозадачности 24
2.1 Способы повышения быстродействия компьютеров 24
Архитектуры процессоров CISC и RISC 24
4.1 Законы Амдала 26
2.2 Параллельные компьютеры с общей памятью 26
2.3 Вычислительные системы с распределённой памятью 29
2.4 GRID 30
2.5 Классификация параллельных компьютеров и систем 32
2.6 Производительность параллельных компьютеров 37
3 Основы многопоточных программ 54
3.1 Основные определения 54
3.2 Виды ресурсов 56
3.3 Типы взаимодействия процессов 57
3.4 Основные средства синхронизации 58
4 Реализация многопоточности на различных платформах 76
4.1 BSD, UNIX System V, POSIX, XPG 76
BSD 76
UNIX System V 76
POSIX 76
POSIX – (Portable Operating System Interface for Unix – переносимый интерфейс операционных систем Unix) – набор стандартов, описывающих интерфейсы между операционной системой и прикладной программой. 77
Разработано комитетом 1003 IEEE, утверждено стандартом ISO/IEC 9945. 77
POSIX 1003.1 – Корневые службы 77
Создание и контроль процессов 77
Сигналы 77
Исключения плавающей точки 77
Нарушение сегментации 77
Запрещенные директивы 77
Ошибки шины 77
Таймеры 77
Операции над файлами (директориями) 77
Каналы 77
Библиотека C (включает стандарт ANSI C) 77
Интерфейс и контроль ввода/вывода 77
POSIX 1003.1b – Расширения реального времени 77
Планировка приоритетов 77
Сигналы реального времени 77
Таймеры и синхронизация 77
Семафоры 77
Передача сообщений 77
Общая память 77
Асинхронный и синхронный ввод/вывод 77
Интерфейс блокировки памяти 77
POSIX 1003.1c – Расширения потоков 77
Создание, контроль и очистка потоков 77
Планировщик потоков 77
Синхронизация потоков 77
Обработка сигналов 77
Поддержка POSIX операционными системами 78
Полная поддержка 78
Android OS 78
LynxOS 78
QNX 78
VxWorks 78
Неполная поддержка 78
FreeBSD 78
Linux 78
Symbian OS 78
POSIX для Windows NT 78
Поддерживается только POSIX 1003.1 http://msdn.microsoft.com/en-us/library/y23kc048(ja-jp,VS.90).aspx 78
Для расширения поддержки POSIX используется Interix 78
http://support.microsoft.com/kb/324081 78
http://msdn.microsoft.com/en-us/library/bb463220.aspx 78
XPG 78
XPG – X/Open Portability Guide – стандарт на ОС UNIX, являющийся более общим, чем POSIX. Определяет требования к операционной системе (тому, что она должна содержать) 78
4.2 WinAPI 78
Возможности по работе с потоками и процессами 78
Работа с процессами 78
Работа с потоками 78
Поддержка 32-разрядных и 64-разрядных потоков 78
Объединение совместно выполняющихся процессов в задания (Job) 78
Пулы потоков 78
Служба поддержки порядка потоков (Thread Ordering Service) – обеспечивает однократное выполнение потоков в нужном порядке в течение заданного периода 78
Служба планировщика мультимедийного класса (Multimedia Class Scheduler Service) – обеспечивает максимально допустимое использование процессора для мультимедийных приложений без запрета выделения ресурсов низкоприоритетным приложениям 79
Волокна (fiber) – возможность самостоятельно планировать выполнение модулей выполнения 79
Поддержка NUMA – (non-uniform memory access) – архитектуры многопроцессорных систем, в которой каждый процессор обладает собственной памятью и обменивается с остальными процессорами посредством кэшируемой шины 79
Работа с логическими процессорами и группами процессоров для поддержки более 64 логических процессоров 79
Пользовательский планировщик (User-Mode Scheduling UMS) – возможность написать собственный планировщик для управления переключением потоков 79
Управление потоками 79
Общие операции 79
CreateThread 79
OpenThread 79
SuspendThread 79
ResumeThread 79
GetCurrentThreadId 79
GetExitCodeThread 79
ExitThread – предпочтительный способ завершения потока 79
TerminateThread – опасна, стек потока не освобождается 79
WaitForSingleObject – ожидание завершения потока 79
GetTickCount – возвращает количество тиков (мс) с момента старта ОС 79
GetThreadTimes 79
Sleep 79
SuspendThread 79
Управление приоритетом 79
SetThreadPriority 79
GetThreadPriority 79
SetThreadPriorityBoost – разрешение или запрет динамического повышения приоритета потока (для активной задачи) 80
GetThreadPriorityBoost 80
Задание приоритетного процессора 80
SetThreadAffinityMask – на основе маски соответствия потока группе процессоров 80
SetThreadIdealProcessor – по номеру процессора 80
Список функций работы с процессами и потоками http://msdn.microsoft.com/en-us/library/ms684847(v=VS.85).aspx 80
Список функций обеспечения синхронизации http://msdn.microsoft.com/en-us/library/ms686360(v=VS.85).aspx 80
Использование разделяемой памяти http://msdn.microsoft.com/en-us/library/aa366878(v=VS.85).aspx 80
Пулы потоков http://www.rsdn.ru/article/baseserv/threadpool.xml 80
Особенности реализации многозадачности http://www.dtf.ru/articles/read.php?id=39888 80
Критические секции http://www.rsdn.ru/article/baseserv/critsec.xml 80
4.3 .NET 80
4.4 Java 83
5 Управление и синхронизация процессов и потоков 86
5.1 Функции создания процессов и управления ими 86
5.2 Функции создания потоков и управления ими 88
5.3 Функции работы со средствами синхронизации 90
6 Системы программирования на основе передачи сообщений 97
6.1 Основы MPI 97
Сообщения 98
Коммуникаторы 100
Обмен сообщениями 100
7 Новые средства многопоточного программирования 103
7.1 Совершенствование пулов потоков 109
7.2 Транзакционная память 109
Приложения 115
|