Программирование на C#. Многопоточность
Вставка
- Опубліковано 21 січ 2020
- На вебинаре:
• научимся создавать потоки.
• узнаем, как работает синхронизации потоков.
• научимся работать с потоками контролов.
• поговорим об асинхронном программировании.
Домашнее задание: docs.google.com/document/d/1g...
ml_start
t.me/MS_ML_START
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
Отлично!
Как по мне - лучший ваш семинарист.
Четко, без воды, с детальным объяснением.
Лучше объяснение многопоточности и асинхронности на просторах интернета. Большое спасибо автору!
Наконец-то среди Ютуба нашлось грамотное объяснение на высочайшем уровне!
Великолепное объяснение. Где бы ещё посмотреть лекции с этим преподавателем.
Супер последовательное и лаконичное обьяснение, гигантское спасибо автору!
Вау. Быстро, четко, по полкам. Скорость реально бимба ❤
Объяснение прекрасное. Спасибо большое:)
Качественно!
Браво...
Здравствуйте , а есть у данного преподавателя свой отдельный канал ? Очень понравилась подача преподавателя , а так же уровень и глубина знаний
спасибо обязательно посмотрю и пересмотрю
32:25
Понимаю, что это реализовали для примера, просто хочу понять, правильно ли распознал возможную проблему.
При добавлении экшена в пул есть следующий фрагмент:
if (_action.Count == 1)
{
Monitor.Pulse(_syncRoot);
}
Получается, что будится один поток и только тогда, когда количество задач строго 1.
Но, что если задач будет добавлено много, допустим 30, прежде чем они будут разобраны.
Тогда мы разбудим лишь один поток, которому и придется разбирать оставшиеся экшены, в то время как остальные потоки будут спать...
То есть, с самого начала, как все потоки уснули, наш тред пулл всегда будет оперировать лишь одним потоком.
Возможное решение:
Вместо блока с _action.Count == 1, будим потоки циклом, в количестве МИНИМАЛЬНОЕ(кол_спящих_потоков, кол_экшенов).
Жизнеспособный ли это вариант?
Там идея обработки случая, когда добавляется первое действие, потому что только в этом случае все потоки спят, если действие не первое, то будить не надо, т.к. идет работа с очередью и есть как минимум один неспящий поток
после слов атомарная операция, меня бросило в холодный пот))
А как же SpinLock, Barrier?
Добрый день, а подскажите новичку, как лучше тогда останавливать поток, либо ставить на паузу? Если не через Thread.Abort()
Thread.Sleep. А вырубать поток, как я понял не очень хорошая практика, нужно просто дождаться завершения потока. Если я не прав - поправьте.
Видео не досмотрел и вопрос задал, гений
Лучше всего брать поток из пула, а вместо того, чтобы его ставить в ожидание в цикле (см Thread.Sleep()) и грузить процессор, его надо возвращать обратно в пул. Именно так и работают таски в асинхронном программировании (см Task.Delay())