18
Многопоточное программирование

Multi threads

Embed Size (px)

DESCRIPTION

Power Point презентация на тему многопоточное программирование.Выполнила: Архилюк Анна

Citation preview

Page 1: Multi threads

Многопоточное программирование

Page 2: Multi threads

Процессы и потоки

Объект исполнения прикладной программы операционной системой представляется двумя понятиямиПроцессПоток

Page 3: Multi threads

ПроцессПроцесс

ПроцессПроцесс (process (process))- экземпляр программы, загруженной - экземпляр программы, загруженной в памятьв память

Процесс – пассивный объект–владелец ресурсов, Процесс – пассивный объект–владелец ресурсов, контейнер для выполнения контейнер для выполнения потоков (потоков (threadthread))

Page 4: Multi threads

Поток / нить (Поток / нить (threadthread))ПотокПоток - абстракция, представляющая - абстракция, представляющая последовательное выполнение команд программы, последовательное выполнение команд программы, развертывающееся во времениразвертывающееся во времени

Выполняются не процессы, а именно потокиВыполняются не процессы, а именно потоки

Любой процесс имеет хотя бы один потокЛюбой процесс имеет хотя бы один поток

Page 5: Multi threads

Поток / нить (Поток / нить (threadthread))

Потоки Потоки совместно совместно используютиспользуют глобальные и статические глобальные и статические

переменные переменные (располагаются в регионе (располагаются в регионе данных)данных)

динамически динамически распределяемую память распределяемую память (кучу)(кучу)

системные ресурсы, системные ресурсы,

выделенные процессувыделенные процессу

Каждый поток имеет Каждый поток имеет свои свои собственныесобственные программный счетчик программный счетчик

(IP)(IP) значения регистровзначения регистров локальные переменные локальные переменные

(т.е. свой собственный (т.е. свой собственный стек)стек)

Page 6: Multi threads

Процессы и потокиПроцессы и потокиПроцесс

Поток

Процесс

Поток

Процесс

Поток

Процесс

Поток

Поток

Процесс

Поток

Процесс

Поток

Поток

ПотокПоток

один потокв процессе

несколькопотоков

в процессе

один процесс несколько процессов

MS-DOS UNIXby

design

Java WinNT,Linux,Mach,

Page 7: Multi threads

Состояния потокаСостояния потока

Готов к выполнени

ю

Блокировка

Создание

Завершение

1

23

4Выполнение

5

6

Page 8: Multi threads

Планирование

Планирование – распределение времени центрального процессора

Процесс

Поток

Процесс

Поток

Поток

Поток

Поток

Процесс

Поток

ПотокЦентральный

процессор

Поток

Page 9: Multi threads

График выполнения потока

Один поток – один процессор

Длинные блоки вычислений

Короткие блоки вычислений

Ожидание ввода-вывода

а)

б)

Время

Page 10: Multi threads

График выполнения потока

Несколько потоков – один процессор

Завершение состояния ожидания – переход в состояние «готов к исполнению»

Поток 2

Время

Поток 1

Поток в состоянии «готов к исполнению»

Нет готовых к выполнению потоков

Page 11: Multi threads

Несколько потоков – несколько процессоров

График выполнения потока

Ожидание ввода-вывода или нахождение в

состоянии ожидания Поток2

Время

Поток1

Page 12: Multi threads

Механизм, позволяющий потокам согласовывать свою работу с общими ресурсами называется механизмом синхронизации

Синхронизация потоков

Page 13: Multi threads

Поток А

x = x+3

Поток В

x = x + 5

Синхронизация потоков

x = x+a

(1) Прочитать x

(2) Увеличить на a

(3) Записать в x

Page 14: Multi threads

Основные объекты синхронизации

Page 15: Multi threads

Синхронизация потоков

Ресурс свободен?

Занять ресурс

Да

Нет

Необходим доступ к ресурсу

Критическая секция

Освободить ресурс

Работа с признаком занятости

(блокировки) ресурса

Page 16: Multi threads

Тупиковые ситуации

Поток Т1

заблокировать А … заблокировать В … освободить А освободить В

Поток Т2

заблокировать В … заблокировать А … освободить В освободить А

Page 17: Multi threads

Тупиковые ситуации

t

Поток Т1

Поток Т2

Ресурс А

Ресурс В

1 2 3

1 2

Поток в состоянии

«блокировка»

Ресурс «свободен / заблокирован»

Page 18: Multi threads

Вывод

Понимание диаграмм выполнения потоков – ключевой момент при разработке и отладке многопоточных программ

Неумелое использование средств синхронизации – источник трудно находимых ошибок и потерь производительности