Многопоточность. Работа с сетью. Делегаты

Содержание

Слайд 2

ПОТОКИ ВЫПОЛНЕНИЯ

ПОТОКИ ВЫПОЛНЕНИЯ

Слайд 3

ПОТОК ВЫПОЛНЕНИЯ ЭТО

Поток выполнения являет собой последовательность действий, выполняемый процессором. В наших

ПОТОК ВЫПОЛНЕНИЯ ЭТО Поток выполнения являет собой последовательность действий, выполняемый процессором. В
предыдущих программах мы имели только один, главный поток, Который и представлял нашу программу.
Но мы можем сами, когда захотим, определить новый поток, с его действиями, и запустить его. Эти действия начнут выполняться параллельно с основными действиями.

Слайд 4

НА КОЙ НУЖНО НЕСКОЛЬКО ПОТОКОВ?

Обычное приложение имеет один поток выполнения, и выполняет

НА КОЙ НУЖНО НЕСКОЛЬКО ПОТОКОВ? Обычное приложение имеет один поток выполнения, и
операции друг за другом. Если необходимо сделать несколько действий одновременно, одно всегда будет выполнено раньше другого, из-за последовательности операций.

Если несколько операций должны работать параллельно и независимо друг от друга, мы можем вынести их в разные потоки, Так что действия из первой операции будут выполняться одновременно с действиями второй операции.
Это очень полезно когда операция значимую часть свою времени чего-то ожидает, ответ от сервера, из БД, диска, откуда угодно.

Слайд 5

НАПРИМЕР, ДЛЯ РАБОТЫ С СЕТЬЮ МЫ ДОЛЖНЫ В ЛЮБОЙ МОМЕНТ ВРЕМЕНИ ПРИНЯТЬ

НАПРИМЕР, ДЛЯ РАБОТЫ С СЕТЬЮ МЫ ДОЛЖНЫ В ЛЮБОЙ МОМЕНТ ВРЕМЕНИ ПРИНЯТЬ
СООБЩЕНИЕ, И ТАК ЖЕ В ЛЮБОЙ МОМЕНТ ВРЕМЕНИ ДОЛЖНЫ ИМЕТЬ ВОЗМОЖНОСТЬ ОТПРАВИТЬ СООБЩЕНИЕ В СЕТЬ

Слайд 6

ГОНКА РЕСУРСОВ, ЧТО ЭТО И ЗАЧЕМ?

Допустим у нас стоит задача увеличить некоторую

ГОНКА РЕСУРСОВ, ЧТО ЭТО И ЗАЧЕМ? Допустим у нас стоит задача увеличить
переменную на 100.
И мы не напишем += 100, мы будем увеличивать ее на единицу 100 раз.
А для того чтобы этот процесс произошел как можно быстрее, мы будем делать это в двух потоках.

А еще, мы будем не просто увеличивать переменную, а копировать ее значение, увеличивать на 1, а потом увеличенное значение записывать в переменную. Что может пойти не так?

Слайд 7

РАССМОТРИМ, КАК ЭТО РАБОТАЕТ

0

Поток 1

Поток 2

РАССМОТРИМ, КАК ЭТО РАБОТАЕТ 0 Поток 1 Поток 2

Слайд 8

РАССМОТРИМ, КАК ЭТО РАБОТАЕТ

0

Поток 1

Поток 2

0

Считали значение 0

РАССМОТРИМ, КАК ЭТО РАБОТАЕТ 0 Поток 1 Поток 2 0 Считали значение 0

Слайд 9

РАССМОТРИМ, КАК ЭТО РАБОТАЕТ

0

Поток 1

Поток 2

1

Считали значение 0

Увеличили его на 1

РАССМОТРИМ, КАК ЭТО РАБОТАЕТ 0 Поток 1 Поток 2 1 Считали значение

Слайд 10

РАССМОТРИМ, КАК ЭТО РАБОТАЕТ

0

Поток 1

Поток 2

1

0

Считали значение 0

Увеличили его на 1

Считали значение

РАССМОТРИМ, КАК ЭТО РАБОТАЕТ 0 Поток 1 Поток 2 1 0 Считали
0

Слайд 11

РАССМОТРИМ, КАК ЭТО РАБОТАЕТ

0

Поток 1

Поток 2

1

1

Считали значение 0

Увеличили его на 1

Считали значение

РАССМОТРИМ, КАК ЭТО РАБОТАЕТ 0 Поток 1 Поток 2 1 1 Считали
0

Увеличили его на 1

Слайд 12

РАССМОТРИМ, КАК ЭТО РАБОТАЕТ

1

Поток 1

Поток 2

1

1

Считали значение 0

Увеличили его на 1

Считали значение

РАССМОТРИМ, КАК ЭТО РАБОТАЕТ 1 Поток 1 Поток 2 1 1 Считали
0

Увеличили его на 1

Записали 1 в результат

Слайд 13

РАССМОТРИМ, КАК ЭТО РАБОТАЕТ

1

Поток 1

Поток 2

1

1

Считали значение 0

Увеличили его на 1

Считали значение

РАССМОТРИМ, КАК ЭТО РАБОТАЕТ 1 Поток 1 Поток 2 1 1 Считали
0

Увеличили его на 1

Записали 1 в результат

Записали 1 в результат

Слайд 14

КАК ИТОГ – ПРОШЛО ДВЕ ИТЕРАЦИИ НАШЕГО АЛГОРИТМА, А ВОТ ЗНАЧЕНИЕ УВЕЛИЧИЛОСЬ

КАК ИТОГ – ПРОШЛО ДВЕ ИТЕРАЦИИ НАШЕГО АЛГОРИТМА, А ВОТ ЗНАЧЕНИЕ УВЕЛИЧИЛОСЬ
ЛИШЬ НА 1

1

Поток 1

Поток 2

1

1

Считали значение 0

Увеличили его на 1

Считали значение 0

Увеличили его на 1

Записали 1 в результат

Записали 1 в результат

Слайд 15

ИЛИ БОЛЕЕ РЕАЛЬНАЯ ЗАДАЧА, МЫ ХОТИМ ВЫВОДИТЬ ДВА ТИПА СООБЩЕНИЙ РАЗНЫМ ЦВЕТОМ.

Один

ИЛИ БОЛЕЕ РЕАЛЬНАЯ ЗАДАЧА, МЫ ХОТИМ ВЫВОДИТЬ ДВА ТИПА СООБЩЕНИЙ РАЗНЫМ ЦВЕТОМ.
поток будет выводить Hi red world красным цветом

А второй поток будет выводить Hi yellow world желтым цветом

Слайд 16

СООТВЕТСТВЕННО КАЖДЫЙ ПОТОК ВЫПОЛНЯЕТ ПО 4 ДЕЙСТВИЯ

Запомнить текущий цвет текста, чтобы вернуть

СООТВЕТСТВЕННО КАЖДЫЙ ПОТОК ВЫПОЛНЯЕТ ПО 4 ДЕЙСТВИЯ Запомнить текущий цвет текста, чтобы
все обратно
Поменять цвет текста на свой
Вывести текст
Поменять цвет текста на исходный

Слайд 17

Наша консоль. Изначально цвет текста белый, допустим

Поток 1, пишет красным

Поток 2, пишет

Наша консоль. Изначально цвет текста белый, допустим Поток 1, пишет красным Поток 2, пишет желтым
желтым

Слайд 18

Наша консоль. Изначально цвет текста белый, допустим

Поток 1, пишет красным

Запомнили цвет текста

Поток

Наша консоль. Изначально цвет текста белый, допустим Поток 1, пишет красным Запомнили
2, пишет желтым

Слайд 19

Наша консоль. Изначально цвет текста белый, допустим

Поток 1, пишет красным

Запомнили цвет текста

Сменили

Наша консоль. Изначально цвет текста белый, допустим Поток 1, пишет красным Запомнили
цвет консоли на красный

Поток 2, пишет желтым

Слайд 20

Наша консоль. Изначально цвет текста белый, допустим

Поток 1, пишет красным

Поток 2, пишет

Наша консоль. Изначально цвет текста белый, допустим Поток 1, пишет красным Поток
желтым

Запомнили цвет текста

Сменили цвет консоли на красный

Запомнили цвет текста

Слайд 21

Наша консоль. Изначально цвет текста белый, допустим

Поток 1, пишет красным

Поток 2, пишет

Наша консоль. Изначально цвет текста белый, допустим Поток 1, пишет красным Поток
желтым

Запомнили цвет текста

Сменили цвет консоли на красный

Запомнили цвет текста

Поменяли цвет текста на желтый

Слайд 22

Наша консоль. Изначально цвет текста белый, допустим

Поток 1, пишет красным

Поток 2, пишет

Наша консоль. Изначально цвет текста белый, допустим Поток 1, пишет красным Поток
желтым

Запомнили цвет текста

Сменили цвет консоли на красный

Запомнили цвет текста

Поменяли цвет текста на желтый

Вывели текст

Hi red world

Слайд 23

Наша консоль. Изначально цвет текста белый, допустим

Поток 1, пишет красным

Поток 2, пишет

Наша консоль. Изначально цвет текста белый, допустим Поток 1, пишет красным Поток
желтым

Запомнили цвет текста

Сменили цвет консоли на красный

Запомнили цвет текста

Поменяли цвет текста на желтый

Вывели текст

Hi red world

Поменяли цвет на исходный

Слайд 24

Наша консоль. Изначально цвет текста белый, допустим

Поток 1, пишет красным

Поток 2, пишет

Наша консоль. Изначально цвет текста белый, допустим Поток 1, пишет красным Поток
желтым

Запомнили цвет текста

Сменили цвет консоли на красный

Запомнили цвет текста

Поменяли цвет текста на желтый

Вывели текст

Hi red world

Поменяли цвет на исходный

Вывели текст

Hi yellow world

Слайд 25

Наша консоль. Изначально цвет текста белый, допустим

Поток 1, пишет красным

Поток 2, пишет

Наша консоль. Изначально цвет текста белый, допустим Поток 1, пишет красным Поток
желтым

Запомнили цвет текста

Сменили цвет консоли на красный

Запомнили цвет текста

Поменяли цвет текста на желтый

Вывели текст

Hi red world

Поменяли цвет на исходный

Вывели текст

Hi yellow world

Поменяли цвет на исходный

Слайд 26

Наша консоль. Изначально цвет текста белый, допустим

Поток 1, пишет красным

Поток 2, пишет

Наша консоль. Изначально цвет текста белый, допустим Поток 1, пишет красным Поток
желтым

Запомнили цвет текста

Сменили цвет консоли на красный

Запомнили цвет текста

Поменяли цвет текста на желтый

Вывели текст

Hi red world

Поменяли цвет на исходный

Вывели текст

Hi yellow world

Поменяли цвет на исходный

В ИТОГЕ И НЕ ТЕМИ ЦВЕТАМИ ВЫВЕЛИ, И ЕЩЕ И ИЗНАЧАЛЬНЫЙ ЦВЕТ НА МЕСТЕ НЕ ОСТАЛСЯ ИСХОДНЫЙ ☹

Слайд 27

ПРОВЕРИМ

ПРОВЕРИМ

Слайд 28

ОБОЗНАЧИМ ПРОБЛЕМУ

В обоих алгоритмах мы надеялись, что итерация каждого из них пройдет

ОБОЗНАЧИМ ПРОБЛЕМУ В обоих алгоритмах мы надеялись, что итерация каждого из них
последовательно, и доступа к общему ресурсу во время выполнения не будет. И правда, ведь если сначала один поток сделает свой набор действий, а уже потом начнет работать другой – все будет в порядке.

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

Слайд 29

РЕШЕНИЕ - LOCK

Lock позволяет какому-то потоку ”захватить” так называемый примитив синхронизации, чтобы

РЕШЕНИЕ - LOCK Lock позволяет какому-то потоку ”захватить” так называемый примитив синхронизации,
ни один другой поток не мог получить доступ к этому примитиву, и соответственно не мог зайти в участок когда, в котором может находиться только один поток.

Слайд 31

Наша консоль. Изначально цвет текста белый

Поток 1, пишет красным

Поток 2, пишет желтым

Примитив

Наша консоль. Изначально цвет текста белый Поток 1, пишет красным Поток 2, пишет желтым Примитив синхронизации
синхронизации

Слайд 32

Наша консоль. Изначально цвет текста белый

Поток 1, пишет красным

Захватили примитив синхронизации

Поток 2,

Наша консоль. Изначально цвет текста белый Поток 1, пишет красным Захватили примитив
пишет желтым

Примитив синхронизации

Слайд 33

Наша консоль. Изначально цвет текста белый

Поток 1, пишет красным

Захватили примитив синхронизации

Поток 2,

Наша консоль. Изначально цвет текста белый Поток 1, пишет красным Захватили примитив
пишет желтым

Примитив синхронизации

Попытались захватить примитив

Слайд 34

Наша консоль. Изначально цвет текста белый

Поток 1, пишет красным

Захватили примитив синхронизации

Поток 2,

Наша консоль. Изначально цвет текста белый Поток 1, пишет красным Захватили примитив
пишет желтым

Примитив синхронизации

Попытались захватить примитив

Запомнили цвет текста

Слайд 35

Наша консоль. Изначально цвет текста белый

Поток 1, пишет красным

Захватили примитив синхронизации

Поток 2,

Наша консоль. Изначально цвет текста белый Поток 1, пишет красным Захватили примитив
пишет желтым

Примитив синхронизации

Попытались захватить примитив

Запомнили цвет текста

Сменили цвет консоли на красный

Слайд 36

Наша консоль. Изначально цвет текста белый

Поток 1, пишет красным

Захватили примитив синхронизации

Поток 2,

Наша консоль. Изначально цвет текста белый Поток 1, пишет красным Захватили примитив
пишет желтым

Примитив синхронизации

Попытались захватить примитив

Запомнили цвет текста

Сменили цвет консоли на красный

Вывели текст

Hi red world

Слайд 37

Наша консоль. Изначально цвет текста белый

Поток 1, пишет красным

Захватили примитив синхронизации

Поток 2,

Наша консоль. Изначально цвет текста белый Поток 1, пишет красным Захватили примитив
пишет желтым

Примитив синхронизации

Попытались захватить примитив

Запомнили цвет текста

Сменили цвет консоли на красный

Вывели текст

Hi red world

Поменяли цвет на исходный

Слайд 38

Наша консоль. Изначально цвет текста белый

Поток 1, пишет красным

Захватили примитив синхронизации

Поток 2,

Наша консоль. Изначально цвет текста белый Поток 1, пишет красным Захватили примитив
пишет желтым

Примитив синхронизации

Попытались захватить примитив

Запомнили цвет текста

Сменили цвет консоли на красный

Вывели текст

Hi red world

Поменяли цвет на исходный

Отпустили примитив синхронизации

Слайд 39

Наша консоль. Изначально цвет текста белый

Поток 1, пишет красным

Захватили примитив синхронизации

Поток 2,

Наша консоль. Изначально цвет текста белый Поток 1, пишет красным Захватили примитив
пишет желтым

Примитив синхронизации

Дорвались до примитива

Запомнили цвет текста

Сменили цвет консоли на красный

Вывели текст

Hi red world

Поменяли цвет на исходный

Отпустили примитив синхронизации

Ну и выполнили все действия

Hi yellow world

Слайд 40

LOCK ПОЗВОЛЯЕТ ОБЕЗОПАСИТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ ПОСЛЕДСТВИЙ

LOCK ПОЗВОЛЯЕТ ОБЕЗОПАСИТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ ПОСЛЕДСТВИЙ

Слайд 41

КАЖДОЕ УСТРОЙСТВО, ПОДКЛЮЧЕННОЕ К ХОТЬ КАКОЙ СЕТИ ИМЕЕТ IP АДРЕС

IP 192.168.0.2

IP 192.168.0.3

Wi-Fi

Ethernet

КАЖДОЕ УСТРОЙСТВО, ПОДКЛЮЧЕННОЕ К ХОТЬ КАКОЙ СЕТИ ИМЕЕТ IP АДРЕС IP 192.168.0.2 IP 192.168.0.3 Wi-Fi Ethernet

Слайд 42

КАЖДОЕ УСТРОЙСТВО, ПОДКЛЮЧЕННОЕ К ХОТЬ КАКОЙ СЕТИ ИМЕЕТ IP АДРЕС

IP 192.168.0.2

IP 192.168.0.3

Wi-Fi

Ethernet

КАЖДОЕ УСТРОЙСТВО, ПОДКЛЮЧЕННОЕ К ХОТЬ КАКОЙ СЕТИ ИМЕЕТ IP АДРЕС IP 192.168.0.2 IP 192.168.0.3 Wi-Fi Ethernet

Слайд 43

Мы говорим именно локальной сети, а не глобальном интернете, сегодня рассмотрим общение

Мы говорим именно локальной сети, а не глобальном интернете, сегодня рассмотрим общение
между устройствами именно в локальной сети.

Слайд 44

СЕГОДНЯ СМОТРИМ НА ТРАНСПОРТНЫЙ УРОВЕНЬ

А именно на протокол UDP

СЕГОДНЯ СМОТРИМ НА ТРАНСПОРТНЫЙ УРОВЕНЬ А именно на протокол UDP

Слайд 45

КАК ПРОИСХОДИТ ПЕРЕДАЧА ИНФОРМАЦИИ С UDP

Google chrome
WoW
Наша программа
OS
Антивирус
Яндекс музыка

Наша прога
PUBG
OneNote
Slack
Outlook

IP 192.168.0.2

IP 192.168.0.3

???

5456
7856
7851
8954
45
905

4536
8394
94
327
2

Порт

КАК ПРОИСХОДИТ ПЕРЕДАЧА ИНФОРМАЦИИ С UDP Google chrome WoW Наша программа OS

Слайд 46

IP назначения
Порт назначения
IP отправителя
Порт отправителя
Пользовательские данные

ДЕЙТАГРАММА

IP назначения Порт назначения IP отправителя Порт отправителя Пользовательские данные ДЕЙТАГРАММА

Слайд 47

IP 192.168.0.2

IP 192.168.0.3

Наша программа, порт 5000

Наша программа, порт 5001

Программа формирует дейтаграмму
К 192.168.0.3
К

IP 192.168.0.2 IP 192.168.0.3 Наша программа, порт 5000 Наша программа, порт 5001
5001
От 192.168.0.2
От 5000
Данные – строка «PING»

Слайд 48

IP 192.168.0.2

IP 192.168.0.3

Наша программа, порт 5000

Наша программа, порт 5001

Эта хреновина отправляется на

IP 192.168.0.2 IP 192.168.0.3 Наша программа, порт 5000 Наша программа, порт 5001
местный роутер

Слайд 49

IP 192.168.0.2

IP 192.168.0.3

Наша программа, порт 5000

Наша программа, порт 5001

Роутер знает, где находится

IP 192.168.0.2 IP 192.168.0.3 Наша программа, порт 5000 Наша программа, порт 5001
ПК с необходимым IP

Слайд 50

IP 192.168.0.2

IP 192.168.0.3

Наша программа, порт 5000

Наша программа, порт 5001

А компьютер знает, у

IP 192.168.0.2 IP 192.168.0.3 Наша программа, порт 5000 Наша программа, порт 5001
какой программы нужный порт, и отправляет наши данные именно ей

Слайд 51

IP 192.168.0.2

IP 192.168.0.3

Наша программа, порт 5000

Наша программа, порт 5001

Программ а на втором

IP 192.168.0.2 IP 192.168.0.3 Наша программа, порт 5000 Наша программа, порт 5001
компьютере, получив информацию PING и зная, кто ее отправил, формирует обратную посылку с данными «PONG», и отправляет ее.