На этом слайде мы поговорим о многопоточности, рассмотрим несколько примеров, кода имеет смысл разделять задачу на потоки, а когда нет. На следующих слайдах мы напишем простой многопоточный сокет для сервера на языке Java
Дата отправки отчёта:
24 ноября 2018 г.
Задание выполнено: за
35 мин.
Чему научился:
В видео интересные примеры многопоточности :)
Мой вариант, когда многопоточность может быть эффективна. Например, стоит задача найти минимальный элемент в огромном массиве. Можно разбить этот массив на несколько более мелких, далее создать несколько потоков, каждый из которых находит минимальный элемент в своём подмассиве. В результате, у нас получится новый массив минимальных элементов и уже в нем основной поток может найти самый минимальный элемент. Чем больше массив и чем больше потоков, тем большая выгода от многопоточности.
Вариант, когда многопоточность не эффективна. Сложно придумать вариант, если я правильно понял, основная идея в том, что задачу сложно распараллелить, отсутствуют независимые части, промежуточные этапы и результаты. Поэтому я выбрал следующий вариант: вывод информации в терминал или работа машинистки на печатной машинке. Как известно, информация выводится строго сверху-вниз и слева-направо. (Допустим терминал крайне допотопный и не умеет перемещать курсор) Невозможно напечатать сначала первую строку, потом прыгнуть на пятую, вывести одну букву и потом обратно на первую. Поэтому невозможно разбить задачу вывода на несколько потоков - когда один поток выводит первую строку, другой одновременно с ним пятую и так далее. Вся работа упирается в мощность одного процесса или в скорость работы одной машинистки. Другими словами, если стоит задача набрать один текст формата А4 на печатной машинке, то несколько машинисток не смогут одновременно набирать на одной машинке, скорость работы упирается в скорость набора машинистки. Вы скажете, что можно набирать одновременно на нескольких машинках и получится несколько копий одного листа А4, но суть не меняется. Другие машинистки не могут скооперироваться, что напечатать быстрее один экземпляр.
Что было сложным:
Придумать варианты эффективности и не эффективности многопоточности.
первый вариант быстрее работает только елси физически есть несколько процессоров. а если процессор один, то из-за повышенных накладных расходов скорость может только снизиться, я думаю.
Согласен, тут имелось ввиду именно чистая многопоточность, когда есть несколько физических процессоров. Это как в вашем примере с чисткой картошки. Очень хорошо показывается, что если работник один, то ему нужно часто пересаживаться с одной табуретки на другую. В этом случае лучше будет ему чистить на одной табуретке, чем скакать по нескольким :) А про машинисток что думаете?
Отчёт оценивали: 1. Евгений Волосатов+1791. Валерий Жданов+117947. Dmitry Sinitsin+120167. Айдар+119384. Владимир+120295. Николай+117425. ser2018+13922. Александр+120061. Даниил Лаутеншлегер+117606. Виктор+13747. Сергей+19913. vip+1
Начинаем практику по языку C#
Чтобы стать хорошим программистом — нужно писать программы.
На нашем сайте очень много практических упражнений.
После заполнения формы ты будешь подписан на рассылку
«C# Вебинары и Видеоуроки»,
у тебя появится доступ к видеоурокам и консольным задачам.
Несколько раз в неделю тебе будут приходить письма —
приглашения на вебинары, информация об акциях и скидках,
полезная информация по C#.
Научился: Многопоточность в жизни это поезда, автобусы, самолёты если бы был всего лишь один поток (самолёт, автобус, поезд) то скорее всего никто никуда бы и уехать то не смог ;)
Однопоточность наверное можно представить как производства какого то продукта, в процессе которого нужно соблюдать строгую последовательность.
Научился: Различать когда имеет смысл разделять задачу на потоки, а когда нет.
Трудности: Помню в студенческие годы, после долгой сибирской зимы, хотелось ускорить приход весны, а громадные сугробы снега таяли не очень охотно. Мы разделяли сугробы на меньшие части (отдельные потоки) и наглядно был виден результат разделения процесса на потоки. В тоже время не тронутые сугробы ещё долгое время продолжали своё существование.
В программистскую фирму поступил срочный заказ на изготовление сложной программы требующей некой новой технологии Х. Однако в фирме всего один специалист, владеющий технологией Х. Поэтому распределение работы между
несколькими программистами не даст необходимого эффекта.