Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
218
Добавлен:
04.06.2015
Размер:
421.38 Кб
Скачать

Краткие итоги

Многопоточность (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. Возможно создание групп потоков. Состояния потоков аналогичны используемым в ОС.

Набор для практики Вопросы

  1. Что такое поток?

  2. Чем отличаются однопоточные и многопоточные процессы?

  3. В чем преимущества многопоточности?

  4. В какой системе впервые было реализовано понятие процесса, близкое современному понятию потока?

  5. В какой ОС многопоточность впервые появилась "официально"?

  6. На какой платформе разработки программ многопоточность впервые была реализована на уровне языка и базовых библиотек?

  7. Что такое пользовательские потоки?

  8. Что такое системные потоки и чем они отличаются от пользовательских?

  9. Какие существуют модели многопоточности?

  10. В чем суть модели много/много?

  11. В чем суть модели много/один?

  12. В чем суть модели один/один?

  13. Каковы проблемы многопоточности?

  14. Что такое сигнал и как он обрабатывается в многопоточной программе?

  15. Что такое исключение и как оно обрабатывается в многопоточной программе?

  16. Что такое группа потоков?

  17. Что такое пул потоков?

  18. Что такое локальная память (данные) потока?

  19. Что такое Pthread?

  20. Какими типами данных описывается поток в POSIX?

  21. Какие средства синхронизации потоков используются в POSIX?

  22. В чем отличие потоков в Solaris от потоков в других системах?

  23. Что такое облегченный процесс?

  24. В чем отличие потоков в Windows 2000?

  25. В чем отличие потоков в Linux?

  26. Как представляются потоки в Java, каковы операции над ними и состояния потоков?

Соседние файлы в папке все лекции по ОС