Курсы по программированию

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

основатель — Волосатов Евгений Витольдович
Поздравляю с 1 сентября! Система начисления Байтов работает.

 13417

-- Chip

Клиент-серверный сокет / VIP. Многопоточность

  • На этом слайде мы поговорим о многопоточности, рассмотрим несколько примеров, кода имеет смысл разделять задачу на потоки, а когда нет. На следующих слайдах мы напишем простой многопоточный сокет для сервера на языке Java
  • Дата отправки отчёта: 24 ноября 2018 г.
  • Задание выполнено: за 35 мин.
  • Чему научился: В видео интересные примеры многопоточности :)

    Мой вариант, когда многопоточность может быть эффективна. Например, стоит задача найти минимальный элемент в огромном массиве. Можно разбить этот массив на несколько более мелких, далее создать несколько потоков, каждый из которых находит минимальный элемент в своём подмассиве. В результате, у нас получится новый массив минимальных элементов и уже в нем основной поток может найти самый минимальный элемент. Чем больше массив и чем больше потоков, тем большая выгода от многопоточности.

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




Оцени работу

 
Сохранить страницу:

1. --
Евгений Волосатов
Евгений Волосатов
ответить
→  Chip  # Клиент-серверный сокет / VIP. Многопоточность / 2018-11-24 12:08

первый вариант быстрее работает только елси физически есть несколько процессоров.
а если процессор один, то из-за повышенных накладных расходов скорость может только снизиться, я думаю.


13417. --
Chip
Chip
ответить
→  Евгений Волосатов  # Клиент-серверный сокет / VIP. Многопоточность / 2018-11-24 12:11

Согласен, тут имелось ввиду именно чистая многопоточность, когда есть несколько физических процессоров. Это как в вашем примере с чисткой картошки. Очень хорошо показывается, что если работник один, то ему нужно часто пересаживаться с одной табуретки на другую. В этом случае лучше будет ему чистить на одной табуретке, чем скакать по нескольким :) А про машинисток что думаете?


  • Отчёт оценивали:
    1Евгений Волосатов+1   791Валерий Жданов+1   17947Dmitry Sinitsin+1   20167Айдар+1   19384Владимир+1   20295Николай+1   17425ser2018+1   3922Александр+1   20061Даниил Лаутеншлегер+1   17606Виктор+1   3747Сергей+1   9913vip+1  

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





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

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

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

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


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



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