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

Нажмите для полного просмотра!
Багатопотоковість і синхронізація. (Лекція 10), слайд №1Багатопотоковість і синхронізація. (Лекція 10), слайд №2Багатопотоковість і синхронізація. (Лекція 10), слайд №3Багатопотоковість і синхронізація. (Лекція 10), слайд №4Багатопотоковість і синхронізація. (Лекція 10), слайд №5Багатопотоковість і синхронізація. (Лекція 10), слайд №6Багатопотоковість і синхронізація. (Лекція 10), слайд №7Багатопотоковість і синхронізація. (Лекція 10), слайд №8Багатопотоковість і синхронізація. (Лекція 10), слайд №9Багатопотоковість і синхронізація. (Лекція 10), слайд №10Багатопотоковість і синхронізація. (Лекція 10), слайд №11

Вы можете ознакомиться и скачать презентацию на тему Багатопотоковість і синхронізація. (Лекція 10). Доклад-сообщение содержит 11 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Багатопотоковість і синхронізація
асинхронні делегати; Thread; пул потоків; синхронізація; таймери; асинхронна модель на базі подій
Описание слайда:
Багатопотоковість і синхронізація асинхронні делегати; 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); // також очікує, якщо потік ще працює
Описание слайда:
Асинхронні делегати Створення делегата, виклик асинхронним чином 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)
Описание слайда:
Дескриптор очікування Асинхронний зворотній виклик Альтернативний спосіб реалізації очікування З об’єктом 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);
Клас з даними і методом, що стане методом потоку
Описание слайда:
Клас 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" });
}
Описание слайда:
Оновлення інтерфейсу користувача з асинхронного потоку Оновлювати інтерфейс можна тільки в тому потоці, який його створив // тип делегата для методу, що оновлюватиме вікно 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
Створення потоку – затрати часу ==> колекція потоків створених завчасу
Автоматичне налаштування кількості потоків
Постановка в чергу завдань за відсутності вільних потоків
Обмеження:
всі потоки фонові
змінювати пріоритет чи ім’я потоку не можна
потоки для короткотривалих завдань
Описание слайда:
Пули потоків 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 {  // блокування отримати не вдалося }
Описание слайда:
Засоби синхронізації потоків одного процесу 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
Описание слайда:
Засоби синхронізації процесів WaitHandle Mutex Semaphore Event ReaderWriterLockSlim Таймери Шаблон BackgroundWorker

Слайд 11





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



Похожие презентации
Mypresentation.ru
Загрузить презентацию