Similar presentations:
Многопоточность. Работа с сетью. Делегаты
1. Многопоточность Работа с сетью Делегаты
2. Потоки выполнения
3. Поток выполнения это
4. На кой нужно несколько потоков?
5. Например, для работы с сетью мы должны в любой момент времени принять сообщение, и так же в любой момент времени должны иметь
6. Гонка ресурсов, что это и зачем?
7. Рассмотрим, как это работает
0Поток 1
Поток 2
8. Рассмотрим, как это работает
00
Считали значение 0
Поток 1
Поток 2
9. Рассмотрим, как это работает
0Увеличили его на 1
1
Считали значение 0
Поток 1
Поток 2
10. Рассмотрим, как это работает
0Увеличили его на 1
1
Считали значение 0
Поток 1
Считали значение 0
Поток 2
0
11. Рассмотрим, как это работает
0Увеличили его на 1
1
Считали значение 0
Поток 1
Увеличили его на 1
Считали значение 0
Поток 2
1
12. Рассмотрим, как это работает
1Записали 1 в результат
Увеличили его на 1
1
Считали значение 0
Поток 1
Увеличили его на 1
Считали значение 0
Поток 2
1
13. Рассмотрим, как это работает
1Записали 1 в результат
Увеличили его на 1
1
Считали значение 0
Поток 1
Записали 1 в результат
Увеличили его на 1
Считали значение 0
Поток 2
1
14. Как итог – прошло две итерации нашего алгоритма, а вот значение увеличилось лишь на 1
1Записали 1 в результат
Увеличили его на 1
1
Считали значение 0
Поток 1
Записали 1 в результат
Увеличили его на 1
Считали значение 0
Поток 2
1
15. Или более реальная задача, мы хотим выводить два типа сообщений разным цветом.
16. Соответственно каждый поток выполняет по 4 действия
1.2.
3.
4.
17.
Наша консоль. Изначально цвет текста белый, допустимПоток 1, пишет красным
Поток 2, пишет желтым
18.
Наша консоль. Изначально цвет текста белый, допустимЗапомнили цвет текста
Поток 1, пишет красным
Поток 2, пишет желтым
19.
Наша консоль. Изначально цвет текста белый, допустимСменили цвет консоли на красный
Запомнили цвет текста
Поток 1, пишет красным
Поток 2, пишет желтым
20.
Наша консоль. Изначально цвет текста белый, допустимСменили цвет консоли на красный
Запомнили цвет текста
Запомнили цвет текста
Поток 1, пишет красным
Поток 2, пишет желтым
21.
Наша консоль. Изначально цвет текста белый, допустимСменили цвет консоли на красный
Поменяли цвет текста на желтый
Запомнили цвет текста
Запомнили цвет текста
Поток 1, пишет красным
Поток 2, пишет желтым
22.
Наша консоль. Изначально цвет текста белый, допустимHi red world
Вывели текст
Сменили цвет консоли на красный
Поменяли цвет текста на желтый
Запомнили цвет текста
Запомнили цвет текста
Поток 1, пишет красным
Поток 2, пишет желтым
23.
Наша консоль. Изначально цвет текста белый, допустимHi red world
Поменяли цвет на исходный
Вывели текст
Сменили цвет консоли на красный
Поменяли цвет текста на желтый
Запомнили цвет текста
Запомнили цвет текста
Поток 1, пишет красным
Поток 2, пишет желтым
24.
Наша консоль. Изначально цвет текста белый, допустимHi red world
Hi yellow world
Поменяли цвет на исходный
Вывели текст
Вывели текст
Сменили цвет консоли на красный
Поменяли цвет текста на желтый
Запомнили цвет текста
Запомнили цвет текста
Поток 1, пишет красным
Поток 2, пишет желтым
25.
Наша консоль. Изначально цвет текста белый, допустимHi red world
Hi yellow world
Поменяли цвет на исходный
Поменяли цвет на исходный
Вывели текст
Вывели текст
Сменили цвет консоли на красный
Поменяли цвет текста на желтый
Запомнили цвет текста
Запомнили цвет текста
Поток 1, пишет красным
Поток 2, пишет желтым
26. В итоге и не теми цветами вывели, и еще и изначальный цвет на месте не остался исходный
Наша консоль. Изначально цвет текста белый, допустимHi red world
Hi yellow world
Поменяли цвет на исходный
Поменяли цвет на исходный
Вывели текст
Вывели текст
Сменили цвет консоли на красный
Поменяли цвет текста на желтый
Запомнили цвет текста
Запомнили цвет текста
Поток 1, пишет красным
Поток 2, пишет желтым
27. Проверим
28. Обозначим проблему
29. Решение - lock
30.
31.
Наша консоль. Изначально цвет текста белыйПоток 1, пишет красным
Примитив
синхронизации
Поток 2, пишет желтым
32.
Наша консоль. Изначально цвет текста белыйПримитив
синхронизации
Захватили примитив синхронизации
Поток 1, пишет красным
Поток 2, пишет желтым
33.
Наша консоль. Изначально цвет текста белыйПримитив
синхронизации
Захватили примитив синхронизации
Попытались захватить примитив
Поток 1, пишет красным
Поток 2, пишет желтым
34.
Наша консоль. Изначально цвет текста белыйПримитив
синхронизации
Запомнили цвет текста
Захватили примитив синхронизации
Попытались захватить примитив
Поток 1, пишет красным
Поток 2, пишет желтым
35.
Наша консоль. Изначально цвет текста белыйПримитив
синхронизации
Сменили цвет консоли на красный
Запомнили цвет текста
Захватили примитив синхронизации
Попытались захватить примитив
Поток 1, пишет красным
Поток 2, пишет желтым
36.
Наша консоль. Изначально цвет текста белыйПримитив
синхронизации
Hi red world
Вывели текст
Сменили цвет консоли на красный
Запомнили цвет текста
Захватили примитив синхронизации
Попытались захватить примитив
Поток 1, пишет красным
Поток 2, пишет желтым
37.
Наша консоль. Изначально цвет текста белыйПримитив
синхронизации
Hi red world
Поменяли цвет на исходный
Вывели текст
Сменили цвет консоли на красный
Запомнили цвет текста
Захватили примитив синхронизации
Попытались захватить примитив
Поток 1, пишет красным
Поток 2, пишет желтым
38.
Наша консоль. Изначально цвет текста белыйПримитив
синхронизации
Hi red world
Отпустили примитив синхронизации
Поменяли цвет на исходный
Вывели текст
Сменили цвет консоли на красный
Запомнили цвет текста
Захватили примитив синхронизации
Попытались захватить примитив
Поток 1, пишет красным
Поток 2, пишет желтым
39.
Наша консоль. Изначально цвет текста белыйПримитив
синхронизации
Hi red world
Hi yellow world
Отпустили примитив синхронизации
Поменяли цвет на исходный
Вывели текст
Ну и выполнили все действия
Сменили цвет консоли на красный
Запомнили цвет текста
Захватили примитив синхронизации
Дорвались до примитива
Поток 1, пишет красным
Поток 2, пишет желтым
40. LOCK позволяет обезопасить последовательность последствий
41. Каждое устройство, подключенное к хоть какой сети имеет IP адрес
IP 192.168.0.3Wi-Fi
IP 192.168.0.2
Ethernet
42. Каждое устройство, подключенное к хоть какой сети имеет IP адрес
IP 192.168.0.3Wi-Fi
IP 192.168.0.2
Ethernet
43.
44. Сегодня смотрим на транспортный уровень
А именно напротокол UDP
45. Как происходит передача информации с UDP
ПортIP 192.168.0.2
???
IP 192.168.0.3
46. Дейтаграмма
47.
Программа формирует дейтаграммуК 192.168.0.3
К 5001
От 192.168.0.2
От 5000
Данные – строка «PING»
IP 192.168.0.3
IP 192.168.0.2
Наша программа, порт 5000
Наша программа, порт 5001
48.
Эта хреновинаотправляется на
местный роутер
IP 192.168.0.3
IP 192.168.0.2
Наша программа, порт 5000
Наша программа, порт 5001
49.
Роутер знает, гденаходится ПК с
необходимым IP
IP 192.168.0.3
IP 192.168.0.2
Наша программа, порт 5000
Наша программа, порт 5001
50.
А компьютер знает, у какойпрограммы нужный порт, и
отправляет наши данные
именно ей
IP 192.168.0.3
IP 192.168.0.2
Наша программа, порт 5000
Наша программа, порт 5001
51.
Программ а на второмкомпьютере, получив
информацию PING и зная, кто
ее отправил, формирует
обратную посылку с данными
«PONG», и отправляет ее.
IP 192.168.0.3
IP 192.168.0.2
Наша программа, порт 5000
Наша программа, порт 5001
internet