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

Содержание


Презентации» Информатика» Багатопотоковість і синхронізація. (Лекція 10)
Багатопотоковість і синхронізація
 асинхронні делегати; Thread; пул потоків; синхронізація; таймери; асинхроннаНавіщо потрібні потоки
 Потік – незалежна послідовність інструкцій, що отримує часАсинхронні делегати
 Створення делегата, виклик асинхронним чином
 int TakesAWhile(int data, intДескриптор очікування Асинхронний зворотній виклик
 Альтернативний спосіб реалізації очікування
 З об’єктомКлас Thread. Передавання даних потокам
 Створювати і керувати
 delegate void ThreadStart();
Оновлення інтерфейсу користувача з асинхронного потоку
 Оновлювати інтерфейс можна тільки вПули потоків ThreadPool
 Створення потоку – затрати часу ==> колекція потоківЗасоби синхронізації потоків одного процесу
 lock(anObject) // thread-safe resources
 k++; //thread-unsafeПроблеми багатопотоковості
 “Гонки” – змагання за один ресурс несинхронізованих потоків
 БлокуванняЗасоби синхронізації процесів
 WaitHandle
 Mutex
 Semaphore
 Event
 ReaderWriterLockSlim
 Таймери
 Шаблон BackgroundWorkerНа самостійне вивчення
 Задачі (task) – новий рівень абстракції потоків (.Net



Слайды и текст этой презентации
Слайд 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(<Params>, 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(<params>, 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)


Скачать презентацию на тему Багатопотоковість і синхронізація. (Лекція 10) можно ниже:

Похожие презентации