Обучение c# видеоуроки

Формула программиста

основатель — Волосатов Евгений Витольдович

VIP. Многопоточность


На этом слайде мы поговорим о многопоточности, рассмотрим несколько примеров, кода имеет смысл разделять задачу на потоки, а когда нет. На следующих слайдах мы напишем простой многопоточный сокет для сервера на языке Java

 

Самостоятельная работа

 1. 
 2. 

Для отправки отчёта по видеоуроку необходимо зарегистрироваться.

 

Начинаем практику по языку C#





Если вы пришли без приглашения -
введите тысяча двадцать четыре (цифрами).
Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.


Научился: Различать когда имеет смысл разделять задачу на потоки, а когда нет.
Трудности: Помню в студенческие годы, после долгой сибирской зимы, хотелось ускорить приход весны, а громадные сугробы снега таяли не очень охотно. Мы разделяли сугробы на меньшие части (отдельные потоки) и наглядно был виден результат разделения процесса на потоки. В тоже время не тронутые сугробы ещё долгое время продолжали своё существование. В программистскую фирму поступил срочный заказ на изготовление сложной программы требующей некой новой технологии Х. Однако в фирме всего один специалист, владеющий технологией Х. Поэтому распределение работы между несколькими программистами не даст необходимого эффекта.



Научился: В видео интересные примеры многопоточности :) Мой вариант, когда многопоточность может быть эффективна. Например, стоит задача найти минимальный элемент в огромном массиве. Можно разбить этот массив на несколько более мелких, далее создать несколько потоков, каждый из которых находит минимальный элемент в своём подмассиве. В результате, у нас получится новый массив минимальных элементов и уже в нем основной поток может найти самый минимальный элемент. Чем больше массив и чем больше потоков, тем большая выгода от многопоточности. Вариант, когда многопоточность не эффективна. Сложно придумать вариант, если я правильно понял, основная идея в том, что задачу сложно распараллелить, отсутствуют независимые части, промежуточные этапы и результаты. Поэтому я выбрал следующий вариант: вывод информации в терминал или работа машинистки на печатной машинке. Как известно, информация выводится строго сверху-вниз и слева-направо. (Допустим терминал крайне допотопный и не умеет перемещать курсор) Невозможно напечатать сначала первую строку, потом прыгнуть на пятую, вывести одну букву и потом обратно на первую. Поэтому невозможно разбить задачу вывода на несколько потоков - когда один поток выводит первую строку, другой одновременно с ним пятую и так далее. Вся работа упирается в мощность одного процесса или в скорость работы одной машинистки. Другими словами, если стоит задача набрать один текст формата А4 на печатной машинке, то несколько машинисток не смогут одновременно набирать на одной машинке, скорость работы упирается в скорость набора машинистки. Вы скажете, что можно набирать одновременно на нескольких машинках и получится несколько копий одного листа А4, но суть не меняется. Другие машинистки не могут скооперироваться, что напечатать быстрее один экземпляр.
Трудности: Придумать варианты эффективности и не эффективности многопоточности.