Потоки в Windows 2000
Как уже отмечалось, в системе Windows реализована модель многопоточности "один / один". Каждый поток содержит:
идентификатор потока (thread id);
набор регистров
отдельные стеки для пользовательских и системных процедур;
область памяти для локальных данных потока (thread-local storage – TLS).
Потоки в Linux
В системе Linux потоки называются tasks (задачами), а не threads. Поток создается системным вызовом clone (). Данный системный вызов позволяет дочерней задаче использовать общее адресное пространство с родительской задачей (процессом).
Потоки в Java
Как уже отмечалось, Java – первая платформа для разработки программ, в которой многопоточность поддержана на уровне языка и базовых библиотек. Потоки в Java могут быть созданы следующими способами:
Как расширения класса Thread
Как классы, реализующие интерфейс Runnable, который содержит единственный метод run – исполняемое тело потока.
Потоки в Java управляются JVM. Возможно создание групп потоков и иерархии таких групп.
Возможные состояния потоков в Java изображены на рис. 10.7. Подобно потокам в ОС, поток в Java создается и находится в состоянии новый, затем – выполняемый; при вызове методов типа wait, sleep и др. поток переходит в состояние ожидания; при завершении метода run поток завершается.
Рис. 10.7. Состояния потоков в Java.
Ключевые термины
Mac C-threads – пользовательские потоки в системе MacOS.
POSIX Pthreads – потоки, специфицированные стандартом POSIX и используемые в POSIX-приложениях.
Solaris threads – пользовательские потоки в ОС Solaris.
Thread – класс, представляющий поток, в языке Java.
Атрибуты потока – совокупность атрибутов POSIX-потока, описываемая типом pthread_attr_t.
Группа потоков (thread group) – совокупность потоков, имеющей свое собственное имя, над потоками которой определены групповые операции.
Дескриптор потока – ссылка на POSIX-поток, описываемая типом pthread_t.
Задача (task) – название потока в Linux.
Исключение (exception) – высокоуровневый механизм обработки ошибочных ситуаций в объектно-ориентированных языках и операционных системах.
Локальные данные потока (thread-local storage - TLS) – данные, принадлежащие только определенному потоку и используемые только этим потоком.
Модель многопоточности – способ отображения пользовательских потоков в потоки ядра.
Модель много / много - модель многопоточности, при которой различные пользовательские потоки могут быть отображены в различные потоки ядра.
Модель много / один - модель многопоточности, при которой несколько пользовательских потоков могут быть отображены в один поток ядра.
Модель один / один – модель многопоточности, при которой каждый пользовательский поток отображается в один определенный поток ядра.
Мьютекс (mutex) – аналог семафоров, обеспечивающий взаимное исключение, используемый в операционных системах.
Облегченный процесс (lightweight process) – процесс, работающий в общем пространстве виртуальной памяти с процессом-родителем.
Поток (thread) – запускаемый из какого-либо процесса более эффективный вариант параллельного процесса, выполняемый в том же адресном пространстве, что и процесс-родитель.
Поток пользовательского уровня (user thread) - высокоуровневый поток, операции над которым включены в интерфейс пользователя ОС.
Поток ядра (kernel thread) - низкоуровневый системный поток, поддержанный и использующийся на уровне ядра операционной системы; используется для реализации потоков пользовательского уровня.
Пул потоков (ThreadPool) – эффективный механизм структурирования потоков в группы в .NET.
Сигналы (в UNIX) – низкоуровневый механизм обработки ошибочных ситуаций.
"Тяжеловесный" (heavyweight) процесс – название классического процесса, работающего в собственном адресном пространстве, в противоположность облегченному процессу.
Условная переменная (conditional variable) - синхронизирующий объект, используемый в операционных системах, с операциями wait и signal.
