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
@aidarfachrutdinov4 жыл бұрын
Отлично!
@ВовкаКим-ч2ы2 жыл бұрын
Лучше объяснение многопоточности и асинхронности на просторах интернета. Большое спасибо автору!
@petrkassadinovich27058 ай бұрын
Как по мне - лучший ваш семинарист. Четко, без воды, с детальным объяснением.
@ВладимирКовяко3 жыл бұрын
Наконец-то среди Ютуба нашлось грамотное объяснение на высочайшем уровне!
@jaimeasm55272 жыл бұрын
Великолепное объяснение. Где бы ещё посмотреть лекции с этим преподавателем.
@xelaksal66902 жыл бұрын
Супер последовательное и лаконичное обьяснение, гигантское спасибо автору!
@МихайлоДвалі Жыл бұрын
Вау. Быстро, четко, по полкам. Скорость реально бимба ❤
@dunno851 Жыл бұрын
Объяснение прекрасное. Спасибо большое:)
@sergvlasov67764 жыл бұрын
Качественно!
@Юрчик-л8у Жыл бұрын
спасибо обязательно посмотрю и пересмотрю
@muhammadahmadov6014 Жыл бұрын
Здравствуйте , а есть у данного преподавателя свой отдельный канал ? Очень понравилась подача преподавателя , а так же уровень и глубина знаний
@ВиталийПаламарчук-ъ5я4 жыл бұрын
Браво...
@petrkassadinovich27058 ай бұрын
32:25 Понимаю, что это реализовали для примера, просто хочу понять, правильно ли распознал возможную проблему. При добавлении экшена в пул есть следующий фрагмент: if (_action.Count == 1) { Monitor.Pulse(_syncRoot); } Получается, что будится один поток и только тогда, когда количество задач строго 1. Но, что если задач будет добавлено много, допустим 30, прежде чем они будут разобраны. Тогда мы разбудим лишь один поток, которому и придется разбирать оставшиеся экшены, в то время как остальные потоки будут спать... То есть, с самого начала, как все потоки уснули, наш тред пулл всегда будет оперировать лишь одним потоком. Возможное решение: Вместо блока с _action.Count == 1, будим потоки циклом, в количестве МИНИМАЛЬНОЕ(кол_спящих_потоков, кол_экшенов). Жизнеспособный ли это вариант?
@timur28878 ай бұрын
Там идея обработки случая, когда добавляется первое действие, потому что только в этом случае все потоки спят, если действие не первое, то будить не надо, т.к. идет работа с очередью и есть как минимум один неспящий поток
@СерегаБ-б3н2 жыл бұрын
Добрый день, а подскажите новичку, как лучше тогда останавливать поток, либо ставить на паузу? Если не через Thread.Abort()
@АртемийКонь Жыл бұрын
Thread.Sleep. А вырубать поток, как я понял не очень хорошая практика, нужно просто дождаться завершения потока. Если я не прав - поправьте.
@Уголок78 Жыл бұрын
Видео не досмотрел и вопрос задал, гений
@timur28878 ай бұрын
Лучше всего брать поток из пула, а вместо того, чтобы его ставить в ожидание в цикле (см Thread.Sleep()) и грузить процессор, его надо возвращать обратно в пул. Именно так и работают таски в асинхронном программировании (см Task.Delay())
@timur28878 ай бұрын
А как же SpinLock, Barrier?
@kyk0_924 Жыл бұрын
после слов атомарная операция, меня бросило в холодный пот))