Программирование на C#. Многопоточность

Поділитися
Вставка
  • Опубліковано 21 січ 2020
  • На вебинаре:
    • научимся создавать потоки.
    • узнаем, как работает синхронизации потоков.
    • научимся работать с потоками контролов.
    • поговорим об асинхронном программировании.
    Домашнее задание: docs.google.com/document/d/1g...
    ml_start
    t.me/MS_ML_START

КОМЕНТАРІ • 22

  • @mlstart3006
    @mlstart3006  3 роки тому +7

    0:14 - Создание и запуск потока. Свойства потока
    3:09 - Отладка многопоточного приложения
    6:42 - Пул потоков. Зачем он нужен. Использование
    9:10 - Написание собственного пула потоков
    12:38 - Проблемы синхронизации потоков. Атомарные и не атомарные операции
    18:29 - Другие примитивы синхронизации. Понятие критической секции
    26:39 - Оптимизация производительности
    32:30 - Корректное закрытие потоков
    40:05 - Прочие примитивы синхронизации. Мьютексы, семафоры, события
    48:40 - Межпроцессная синхронизация при помощи Mutex. Создание Single Instance приложения
    52:00 - Многопоточность и GUI. Понятие контекста синхронизации
    59:26 - Потокобезопасные контейнеры
    1:08:45 - Асинхронное программирование. Развитие подходов
    1:14:12 - Класс Task. Паттерн async/await
    1:20:37 - Async/await и WinForms
    1:27:54 - Кое-что о внутреннем устройстве async/await
    1:29:35 - Полезные методы для работы с Task
    1:36:02 - Отмена операций. CancellationToken

  • @petrkassadinovich2705
    @petrkassadinovich2705 2 місяці тому +3

    Как по мне - лучший ваш семинарист.
    Четко, без воды, с детальным объяснением.

  • @user-bn5pp4vf6z
    @user-bn5pp4vf6z Рік тому +7

    Лучше объяснение многопоточности и асинхронности на просторах интернета. Большое спасибо автору!

  • @user-bi1ll1wy2m
    @user-bi1ll1wy2m 3 роки тому +8

    Наконец-то среди Ютуба нашлось грамотное объяснение на высочайшем уровне!

  • @jaimeasm5527
    @jaimeasm5527 2 роки тому +5

    Великолепное объяснение. Где бы ещё посмотреть лекции с этим преподавателем.

  • @xelaksal6690
    @xelaksal6690 2 роки тому +1

    Супер последовательное и лаконичное обьяснение, гигантское спасибо автору!

  • @user-xj7te3qs8u
    @user-xj7te3qs8u 8 місяців тому

    Вау. Быстро, четко, по полкам. Скорость реально бимба ❤

  • @dunno851
    @dunno851 8 місяців тому

    Объяснение прекрасное. Спасибо большое:)

  • @sergvlasov6776
    @sergvlasov6776 3 роки тому +2

    Качественно!

  • @user-ql2ff4mv6k
    @user-ql2ff4mv6k 4 роки тому +3

    Браво...

  • @muhammadahmadov6014
    @muhammadahmadov6014 7 місяців тому +3

    Здравствуйте , а есть у данного преподавателя свой отдельный канал ? Очень понравилась подача преподавателя , а так же уровень и глубина знаний

  • @user-ix4cm7ch5z
    @user-ix4cm7ch5z 7 місяців тому

    спасибо обязательно посмотрю и пересмотрю

  • @petrkassadinovich2705
    @petrkassadinovich2705 2 місяці тому

    32:25
    Понимаю, что это реализовали для примера, просто хочу понять, правильно ли распознал возможную проблему.
    При добавлении экшена в пул есть следующий фрагмент:
    if (_action.Count == 1)
    {
    Monitor.Pulse(_syncRoot);
    }
    Получается, что будится один поток и только тогда, когда количество задач строго 1.
    Но, что если задач будет добавлено много, допустим 30, прежде чем они будут разобраны.
    Тогда мы разбудим лишь один поток, которому и придется разбирать оставшиеся экшены, в то время как остальные потоки будут спать...
    То есть, с самого начала, как все потоки уснули, наш тред пулл всегда будет оперировать лишь одним потоком.
    Возможное решение:
    Вместо блока с _action.Count == 1, будим потоки циклом, в количестве МИНИМАЛЬНОЕ(кол_спящих_потоков, кол_экшенов).
    Жизнеспособный ли это вариант?

    • @timur2887
      @timur2887 2 місяці тому

      Там идея обработки случая, когда добавляется первое действие, потому что только в этом случае все потоки спят, если действие не первое, то будить не надо, т.к. идет работа с очередью и есть как минимум один неспящий поток

  • @kyk0_924
    @kyk0_924 6 місяців тому

    после слов атомарная операция, меня бросило в холодный пот))

  • @timur2887
    @timur2887 2 місяці тому

    А как же SpinLock, Barrier?

  • @user-sy9sg2fv6k
    @user-sy9sg2fv6k 2 роки тому +1

    Добрый день, а подскажите новичку, как лучше тогда останавливать поток, либо ставить на паузу? Если не через Thread.Abort()

    • @user-ow1sd5mt6y
      @user-ow1sd5mt6y 8 місяців тому

      Thread.Sleep. А вырубать поток, как я понял не очень хорошая практика, нужно просто дождаться завершения потока. Если я не прав - поправьте.

    • @user-vf1rw2rt5f
      @user-vf1rw2rt5f 6 місяців тому +1

      Видео не досмотрел и вопрос задал, гений

    • @timur2887
      @timur2887 2 місяці тому

      Лучше всего брать поток из пула, а вместо того, чтобы его ставить в ожидание в цикле (см Thread.Sleep()) и грузить процессор, его надо возвращать обратно в пул. Именно так и работают таски в асинхронном программировании (см Task.Delay())