Многопоточность Работа с сетью Делегаты
Потоки выполнения
Поток выполнения это
На кой нужно несколько потоков?
Например, для работы с сетью мы должны в любой момент времени принять сообщение, и так же в любой момент времени должны иметь
Гонка ресурсов, что это и зачем?
Рассмотрим, как это работает
Рассмотрим, как это работает
Рассмотрим, как это работает
Рассмотрим, как это работает
Рассмотрим, как это работает
Рассмотрим, как это работает
Рассмотрим, как это работает
Как итог – прошло две итерации нашего алгоритма, а вот значение увеличилось лишь на 1
Или более реальная задача, мы хотим выводить два типа сообщений разным цветом.
Соответственно каждый поток выполняет по 4 действия
В итоге и не теми цветами вывели, и еще и изначальный цвет на месте не остался исходный 
Проверим
Обозначим проблему
Решение - lock
LOCK позволяет обезопасить последовательность последствий
Каждое устройство, подключенное к хоть какой сети имеет IP адрес
Каждое устройство, подключенное к хоть какой сети имеет IP адрес
Сегодня смотрим на транспортный уровень
Как происходит передача информации с UDP
Дейтаграмма
Для нашего базового Ping pong
12.81M
Category: internetinternet

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

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

2. Потоки выполнения

3. Поток выполнения это

4. На кой нужно несколько потоков?

5. Например, для работы с сетью мы должны в любой момент времени принять сообщение, и так же в любой момент времени должны иметь

6. Гонка ресурсов, что это и зачем?

7. Рассмотрим, как это работает

0
Поток 1
Поток 2

8. Рассмотрим, как это работает

0
0
Считали значение 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.3
Wi-Fi
IP 192.168.0.2
Ethernet

42. Каждое устройство, подключенное к хоть какой сети имеет IP адрес

IP 192.168.0.3
Wi-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
English     Русский Rules