8. Лекция: Потоки (threads) и многопоточное выполнение программ (multi-threading)
В лекции рассматриваются понятие потока (thread) и многопоточное выполнение (multi-threading); модели многопоточности; пользовательские потоки и потоки ядра; потоки в "Эльбрусе", Solaris, Linux, POSIX, Windows 2000, Java.
Содержание
Введение Однопоточные и многопоточные процессы История многопоточности Пользовательские потоки и потоки ядра Проблемы многопоточности Потоки POSIX (Pthreads) Потоки и процессы в Solaris Потоки в Windows 2000 Потоки в Linux Потоки в Java Ключевые термины Краткие итоги Набор для практики Вопросы Упражнения Темы для курсовых работ, рефератов, эссе
Введение
Многопоточность (multi-threading) – одна из наиболее интересных и актуальных тем в данном курсе и, по-видимому, в области ИТ вообще, и, кроме того, одна из излюбленных тем автора. Актуальность данной темы особенно велика, в связи с широким распространением многоядерных процессоров. В лекции рассмотрены следующие вопросы:
Исторический обзор многопоточности Модели многопоточного исполнения Проблемы, связанные с потоками Потоки в POSIX (Pthreads) Потоки в Solaris 2 Потоки в Windows 2000/XP Потоки в Linux Потоки в Java и .NET.
Однопоточные и многопоточные процессы
Рис. 10.1. Однопоточный и многопоточный процессы.
Как видно из схемы, однопоточный процесс использует, как обычно, код, данные в основной памяти и файлы, с которыми он…
История многопоточности
Концепция многопоточности начала складываться, по-видимому, с 1980-х гг. в системе UNIX и ее диалектах. Наиболее развита многопоточность была в… Далее, в середине 1990-х гг. была выпущена ОС Windows NT, в которую была также… Однако в разных операционных системах API для многопоточности существенно отличались. Поэтому многопоточные программы,…
Пользовательские потоки и потоки ядра
Низкоуровневые потоки, в которые отображаются пользовательские потоки, называются потоками ядра (kernel threads).Они поддержаны и используются на… Существуют различные модели многопоточности– способы отображения… - Модель много / один (many-to-one)– отображение нескольких пользовательских потоков в один и тот же поток ядра.…
Проблемы многопоточности
Семантика системных вызовов fork() и exec().Как уже отмечалось, в классической ОС UNIX системный вызов forkсоздает новый "тяжеловесный"… Прекращение потоков. Важной проблемой является проблема прекращения потоков:… Обработка сигналов. Сигналыв UNIX – низкоуровневый механизм обработки ошибочных ситуаций. Примеры сигналов: SIGSEGV…
Потоки и процессы в Solaris
Рис. 10.5. Потоки в Solaris.
На рис. 10.6 изображена схема организации процесса в ОС Solaris.
Потоки в Windows 2000
Как уже отмечалось, в системе Windows реализована модель многопоточности "один / один". Каждый поток содержит:
идентификатор потока (thread id); набор регистров отдельные стеки для пользовательских и системных процедур; область памяти для локальных данных потока (thread-local storage – TLS).
Потоки в Linux
В системе Linux потоки называются tasks (задачами),а не threads. Поток создается системным вызовом clone (). Данный системный вызов позволяет дочерней задаче использовать общее адресное пространство с родительской задачей (процессом).
Потоки в Java
Потоки в Java управляются JVM. Возможно создание групп потоков и иерархии таких групп.
Возможные состояния потоков в Java изображены на рис. 10.7. Подобно потокам в…
Ключевые термины
POSIX Pthreads – потоки, специфицированные стандартом POSIX и используемые в POSIX-приложениях.
Solaris threads – пользовательские потоки в ОС Solaris.
Thread – класс, представляющий поток, в языке Java.
Модель много / много- модель многопоточности,при которой различные пользовательские потокимогут быть отображены в различные потоки ядра.
Модель один / один– модель многопоточности, при которой каждый пользовательский потокотображается в один определенный поток ядра.
Мьютекс (mutex)– аналог семафоров, обеспечивающий взаимное исключение,… Облегченный процесс (lightweight process)– процесс, работающий в общем пространстве виртуальной памяти с…
Краткие итоги
Впервые понятие процесса, близкое современной концепции потока, было реализовано в системе "Эльбрус" в конце 1970-х гг. Многопоточность… Архитектура потоков – многоуровневая: потоки пользовательского уровня… Многопоточность ставит ряд интересных проблем: семантика системных вызовов fork и exec; прекращение потоков; обработка…
Набор для практики
Вопросы
Упражнения
Темы для курсовых работ, рефератов, эссе