Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практические ОП 04 выполнять 1-4, 5,6,10,15,16,18,23,24,26,29 за год.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

Практическая работа №11 Обзор многопоточности в unix

Цель работы: научиться проводить анализ преимуществ, недостатков, проблем многопоточностив UNIX

Оборудование: Персональный компьютер с ОС Linux

Индивидуальное задание. Провести анализ многопоточности, выявить особенности, достоинства и недостаткимногопоточности в UNIX.

Теоретические сведения

Многопоточность — свойство платформы (например, операционной системы, виртуальной машины и т. д.) или приложения, состоящее в том, что процесс, порождённый в операционной системе, может состоять из нескольких потоков, выполняющихся «параллельно», то есть без предписанного порядка во времени. При выполнении некоторых задач такое разделение может достичь более эффективного использования ресурсов вычислительной машины.

Процессы в традиционных Unix-системах

В Unix для исполнения программ создаются процессы

Процесс – это процесс исполнения образа процесса

Образ процесса – виртуальное адресное пространство, содержащее код и данные. Кроме этого, образ процесса включает в себя пользовательскую область (структуры данных ядра, связанные с процессом)

В не-Unix системах процессы также называют задачами (task)

Unix – многозадачная ОС

Программа исполняется в рамках процесса последовательно, как будто под управлением однозадачной ОС

Это упрощает программирование

Если задача требует распараллеливания, необходимо запускать несколько процессов.

Межпроцессное взаимодействие в традиционном Unix через:

Трубы

Сокеты TCP

Unix domain sockets

Разделяемые файлы и блокировка участков файлов

System V IPC (разделяемая память, семафоры, очереди сообщений)

Семафоры и разделяемая память Xenix

Разделяемые файлы

Что дает многопоточность (по сравнению с System V IPC)

Потоки дешевле процессов (нет своего адресного пространства)

Потоки дают все преимущества разделяемой памяти

Потоки проще использовать, чем разделяемую память System V IPC

переменные гарантированно находятся по одним и тем же адресам,

можно взаимодействовать через глобальные переменные и произвольные структуры данных

Зачем нужна многопоточность

Улучшение времени реакции интерактивных программ

Повышение производительности (улучшение времени реакции) серверных приложений

Использование многопроцессорных машин и многоядерных процессоров

Приложения мультимедиа и жесткого реального времени

Улучшение времени реакции

Фоновое скачивание страницы в браузере

Фоновый ввод-вывод (например, утилита просмотра файла может считывать файл по мере его просмотра)

Фоновая проверка орфографии

Фоновое переразбиение текста на страницы в WYSIWYG текстовых процессорах

Серверные приложения

Что мешает перейти к многопоточности

Несовместимость со старыми (однопоточными) компиляторами

Несовместимость со старыми библиотеками

Несовместимость или ограниченная поддержка многопоточных программ другими инструментальными средствами, в первую очередь отладчиками

Несовместимость многих принятых практик программирования с многопоточностью

Как эти проблемы решались

  • Многие языки высокого уровня поддерживают многопоточность на уровне языка:

    • Simula 67

    • Ada

    • Occam

    • Parallel Fortran

    • Директивы (#pragma) OpenMP

  • Это требует переделки компиляторов

  • POSIXThreadAPI требует лишь минимальной поддержки со стороны компилятора

    • отказ от некоторых опасных оптимизаций,

    • в С++ - стандартизованный ABI вызова деструкторов

  • Не рекомендуется использовать OpenMP и POSIXthreads в одной и той же программе (на нижнем уровне это одни и те же потоки)

Проблемы многопоточности

Многопоточность – весьма сложная, еще не полностью изученная и, тем более, не полностью формализованная область, в которой имеется много интересных проблем. Рассмотрим некоторые из них.

Семантика системных вызовов fork() и exec().Как уже отмечалось, в классической ОС UNIX системный вызов fork создает новый "тяжеловесный" процесс со своим адресным пространством, что значительно "дороже", чем создание потока. Однако, с целью поддержания совместимости программ снизу вверх, приходится сохранять эту семантику, а многопоточность вводить с помощью новых системных вызовов.

Прекращение потоков. Важной проблемой является проблема прекращения потоков: например, если родительский потокпрекращается, то должен ли при этом прекращаться дочерний поток? Если прекращается стандартный процесс, создавший несколько потоков, то должны ли прекращаться все его потоки? Ответы на эти вопросы в разных ОС неоднозначны.

Ход работы:

1. Ознакомиться с теоретическими сведениями.

2. Провести анализ многопоточности, выявить особенности, достоинства и недостатки. Результаты оформить в таблице.

Содержание отчета

Отчет по практической работе должен содержать следующие пункты:

- название практической работы;

- цель работы;

- краткие теоретические сведения;

- индивидуальное задание для выполнения практической работы;

- краткое описание хода выполнения работы;

- результаты выполнения работы;

- выводы.

Контрольные вопросы:

1. Что такое многопоточность?

2. Какие достоинства имеет многопоточность?

3. Какие недостатки имеет многопоточность?

4. Что такое взаимоисключение?

5. Что такое семафоры?

6. Для чего предназначены критические секции и события?