Багатопотоковість і синхронізація. (Лекція 10) презентация

Слайд 1Багатопотоковість і синхронізація
асинхронні делегати; Thread; пул потоків; синхронізація; таймери; асинхронна модель

на базі подій

Слайд 2Навіщо потрібні потоки
Потік – незалежна послідовність інструкцій, що отримує час процесора
Багатопотоковість

– спосіб “поділу обов’язків”
окремий потік для довготривалої задачі
різні потоки для різних ядер процесора
Процес == ресурси + пам’ять + потік(и)
системна охорона адресного простору
міжпроцесна взаємодія – через ОС
Потік має власний стек для локальних змінних, використовує спільні код і купу
спільна пам’ять – проста взаємодія між потоками
Потреби синхронізації потоків

Слайд 3Асинхронні делегати
Створення делегата, виклик асинхронним чином
int TakesAWhile(int data, int ms, char

c) //”тривалий”метод
// тип делегата і екземпляр делегата delegate int TakesAWhileDelegate(int data, int ms, char c); TakesAWhileDelegate d = TakesAWhile;
// “контрольований” асинхронний виклик // IAsyncresult BeginInvoke(, AsyncCallback, object); IAsyncresult ar = d.BeginInvoke(counter, 3000, '.', null, null);
Очікування завершення та отримання результату
while ( !ar.IsCompleted ) …// паралельне виконання ще чогось
//MethodResultType EndInvoke(IAsyncResult ar); result = d.EndInvoke(ar); // також очікує, якщо потік ще працює

Слайд 4Дескриптор очікування Асинхронний зворотній виклик
Альтернативний спосіб реалізації очікування
З об’єктом IAsyncResult асоційовано

дескриптор WaitHandle (приховує системний об’єкт синхронізації)
property AsyncWaitHandle
bool WaitOne(int Timeout) // метод(и) “присипляє” потік
Результат залежить від того, чи завершився потік впродовж Timeout мілісекунд
“Запустити і забути”
void AsyncCallback(IAsyncresult ar); // тип делегата void TakesAWhileCompleted(IAsyncResult ar) // метод
d.Beginlnvoke(counter, 3000, TakesAWhileCompleted, obj); //Beginlnvoke(, MetodOrLambda, objectForMethod)

Слайд 5Клас Thread. Передавання даних потокам
Створювати і керувати
delegate void ThreadStart();
tread = new Thread(aMethodName)
лямбда-вираз

замість методу
tread.Start(); Name, Priority …
Thread.Sleep(ms), Abort(), ResetAbort(), …
Створені потоки – пріоритетні
Метод з параметром
delegate void ParametrizedThreadStart(object);
Клас з даними і методом, що стане методом потоку

Слайд 6Оновлення інтерфейсу користувача з асинхронного потоку
Оновлювати інтерфейс можна тільки в тому

потоці, який його створив
// тип делегата для методу, що оновлюватиме вікно delegate void SetTextCallback(string text);
void ChangeName(string name) // сам метод
// створення і запуск потоку thread = new Thread(new ThreadStart(DoWork)); thread.Start();
// оновлення вікна, виклик в тілі DoWork if (this.control.InvokeRequired) { this.Invoke(new SetTextCallback(ChangeName), new object[] {" New Text by Invoke" }); }

Слайд 7Пули потоків ThreadPool
Створення потоку – затрати часу ==> колекція потоків створених

завчасу
Автоматичне налаштування кількості потоків
Постановка в чергу завдань за відсутності вільних потоків
Обмеження:
всі потоки фонові
змінювати пріоритет чи ім’я потоку не можна
потоки для короткотривалих завдань

Слайд 8Засоби синхронізації потоків одного процесу
lock(anObject) // thread-safe resources
k++; //thread-unsafe operation
Interlocked.Operation(anObject)
Increment(), Decrement(),

Exchange(), Add(), …
Monitor: lock(anObj) ? Monitor.Enter(anObj)
bool lockTaken = false; Monitor.TryEnter (obj, 500, ref lockTaken); if (lockTaken) { try { // синхронизирована область для obj } finally { Monitor.Exit (obj); } } else { // блокування отримати не вдалося }

Слайд 9Проблеми багатопотоковості
“Гонки” – змагання за один ресурс несинхронізованих потоків
Блокування ресурсу на

час доступу
на рівні самого ресурсу
на рівні звертання до ресурсу
“Тупики” – взаємне блокування як наслідок очікування на завершення роботи
ліміти часу на очікування зняття блокувань

Слайд 10Засоби синхронізації процесів
WaitHandle
Mutex
Semaphore
Event
ReaderWriterLockSlim

Таймери
Шаблон BackgroundWorker


Слайд 11На самостійне вивчення
Задачі (task) – новий рівень абстракції потоків (.Net 4.0)
Багатопотокові

обчислення за допомогою класу Parallel (.Net 4.0)

Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

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


Для правообладателей

Яндекс.Метрика