
Краткие итоги
Многопоточность (multi-threading) – современное направление программирования, особенно актуальное в связи с широким распространением параллельных компьютерных архитектур. Поток – особый вид процесса, выполняемый в общем адресном пространстве с процессом-родителем. Поток характеризуется своим стеком, потоком управления и значениями регистров. Облегченный процесс (lightweight process) – механизм, с помощью которого реализуются потоки в ОС.
Впервые понятие процесса, близкое современной концепции потока, было реализовано в системе "Эльбрус" в конце 1970-х гг. Многопоточность появилась в UNIX, затем – в Solaris и Windows NT. В различных ОС архитектуры библиотек поддержки многопоточности различаются. В Java-технологии, а вслед за ней – в .NET, впервые многопоточность была реализована на уровне языка и базовых библиотек.
Архитектура потоков – многоуровневая: потоки пользовательского уровня реализуются с помощью системных потоков (потоков ядра). Существуют различные модели многопоточности (способы отображения пользовательских потоков в системные) – один-один, один-много, много-один.
Многопоточность ставит ряд интересных проблем: семантика системных вызовов fork и exec; прекращение потоков; обработка сигналов; структуризация потоков в группы; поддержка локальных данных потока (TLS); синхронизация потоков; тупики (взаимная блокировка потоков) и их предотвращение.
POSIX threads (Pthreads) - стандартизация API для поддержки многопоточности для операционных систем типа UNIX. Поток характеризуется своим дескриптором и атрибутами. Для синхронизации потоков используются мьютексы и условные переменные.
Потоки в ОС Solaris отличаются тем, что явно присутствует понятие облегченного процесса, наряду с понятиями пользовательского и системного потоков. Каждый традиционный процесс хранит список созданных в нем облегченных процессов Используется модель многопоточности "много-много".
В Windows 2000 используется модель многопоточности "один-один". Каждый поток содержит свой номер, набор регистров, отдельные стеки для пользовательских и системных процедур, локальную память потока (TLS).
В Linux потоки называются задачами (tasks) и создаются системным вызовом clone.
Потоки в Java поддержаны на уровне языка и базовых библиотек. Представляются объектами класса Thread и его подклассов. Управляются виртуальной машиной Java. Возможно создание групп потоков. Состояния потоков аналогичны используемым в ОС.
Набор для практики Вопросы
Что такое поток?
Чем отличаются однопоточные и многопоточные процессы?
В чем преимущества многопоточности?
В какой системе впервые было реализовано понятие процесса, близкое современному понятию потока?
В какой ОС многопоточность впервые появилась "официально"?
На какой платформе разработки программ многопоточность впервые была реализована на уровне языка и базовых библиотек?
Что такое пользовательские потоки?
Что такое системные потоки и чем они отличаются от пользовательских?
Какие существуют модели многопоточности?
В чем суть модели много/много?
В чем суть модели много/один?
В чем суть модели один/один?
Каковы проблемы многопоточности?
Что такое сигнал и как он обрабатывается в многопоточной программе?
Что такое исключение и как оно обрабатывается в многопоточной программе?
Что такое группа потоков?
Что такое пул потоков?
Что такое локальная память (данные) потока?
Что такое Pthread?
Какими типами данных описывается поток в POSIX?
Какие средства синхронизации потоков используются в POSIX?
В чем отличие потоков в Solaris от потоков в других системах?
Что такое облегченный процесс?
В чем отличие потоков в Windows 2000?
В чем отличие потоков в Linux?
Как представляются потоки в Java, каковы операции над ними и состояния потоков?