Скачать презентацию Многопоточность Процесс Создается операционной системой при запуске Скачать презентацию Многопоточность Процесс Создается операционной системой при запуске

multithread lecture.ppt

  • Количество слайдов: 15

Многопоточность Процесс • Создается операционной системой при запуске приложения • Имеет отдельное адресное пространство, Многопоточность Процесс • Создается операционной системой при запуске приложения • Имеет отдельное адресное пространство, физически недоступно для других процессов Поток • Работает внутри процесса • Является потоком выполняющихся по очереди команд центрального процессора. • Потоки одного процесса имеют общую память

Многопоточность Средства запуска потока на выполнение: 1. System. Threading. Thread Позволяет контролировать поток: Пауза, Многопоточность Средства запуска потока на выполнение: 1. System. Threading. Thread Позволяет контролировать поток: Пауза, продолжение, останов(через Exception), пр. 2. Delegate. Begin. Invoke Весь контроль на разработчике Средства синхронизации потоков: Threading. Thread. Wait() Threading. Manual. Reset. Event

Применение многопоточного выполнения • Фоновое выполнение вычислений. • Организация работы с медленным оборудованием • Применение многопоточного выполнения • Фоновое выполнение вычислений. • Организация работы с медленным оборудованием • Ускорение выполнения на многопроцессорных системах

Проблемы • Ограничения библиотек. Например Win API -> Windows Forms. • Совместный доступ к Проблемы • Ограничения библиотек. Например Win API -> Windows Forms. • Совместный доступ к одной памяти • Взаимная блокировка (Deadlock) • Порождение чрезмерно большого количества потоков

Вызов процедур в другом потоке. Новый поток (вычисления) Поток окна. Обработка очереди сообщений Form. Вызов процедур в другом потоке. Новый поток (вычисления) Поток окна. Обработка очереди сообщений Form. Invoke Исполнения функции

Средства синхронизации потоков в. NET • Критическая секция (lock) • Wait. Handle • Очередь Средства синхронизации потоков в. NET • Критическая секция (lock) • Wait. Handle • Очередь (queue<>)

Чистая функция • Возвращает всегда одно и то же значение при одинаковом наборе аргументов, Чистая функция • Возвращает всегда одно и то же значение при одинаковом наборе аргументов, не зависит от состояния программы (детерминированность) • Не обладает побочными эффектами, не изменяет состояние программы

Анонимные делегаты void Start. Thread() { System. Threading. Thread t 1 = new System. Анонимные делегаты void Start. Thread() { System. Threading. Thread t 1 = new System. Threading. Thread (delegate() { System. Console. Write("Hello, "); System. Console. Write. Line("World!"); }); t 1. Start(); }

Функциональное программирование • Программа состоит из чистых функций • В ВП нет переменных. Есть Функциональное программирование • Программа состоит из чистых функций • В ВП нет переменных. Есть константы, есть функции. • Функция может принимать параметрами значения или другие функции

Пример задачи Является ли число степенью двойки? Вводится число. Напечатать YES, если оно является Пример задачи Является ли число степенью двойки? Вводится число. Напечатать YES, если оно является степенью двойки, NO - иначе Пример вводимых данных 8 Пример выводимых данных YES Пример вводимых данных 22 Пример выводимых данных NO

Решение open System let rec Step 2 a = if a=1 then true elif Решение open System let rec Step 2 a = if a=1 then true elif a%2<>0 then false else Step 2 (a/2) let a = Convert. To. Int 32(Console. Read. Line()) Console. Write. Line(Step 2 a) Console. Read()

Пример задачи Вводится последовательность чисел. Посчитать в ней количество четных чисел, стоящих на четных Пример задачи Вводится последовательность чисел. Посчитать в ней количество четных чисел, стоящих на четных местах. Входные данные Вводится сначала число N, а затем N чисел - члены последовательности. Выходные данные. Выведите количество четных чисел, стоящих на четных местах в последовательности. Пример вводимых данных 5 12456 Пример выводимых данных: 1

Решение open System let rec read. Num n = [ for i in 1. Решение open System let rec read. Num n = [ for i in 1. . n do yield (i, Convert. To. Int 32(Console. Read. Line())) ] let read. Data = let n = Convert. To. Int 32(Console. Read. Line()) read. Num n let rec Count. Elements ss condition = match ss with | [head] -> condition head | head : : tail -> (condition head) + Count. Elements tail condition let Answer = Count. Elements read. Data (fun (i, x) -> if i%2=0 && x%2=0 then 1 else 0 ) Console. Write. Line(Answer);

Пример задачи Вводится сначала число N, а затем N чисел. Выведите эти N чисел Пример задачи Вводится сначала число N, а затем N чисел. Выведите эти N чисел в обратном порядке. Входные данные Вводится число N (0

Решение open System; let rec read. Num n = [ for i in 1. Решение open System; let rec read. Num n = [ for i in 1. . n do yield Convert. To. Int 32(Console. Read. Line()) ] let read. Data = let n = Convert. To. Int 32(Console. Read. Line()) read. Num n let rec reverse ss = match ss with | [] -> [] | head : : tail -> (reverse tail) @ [head] let Answer = reverse read. Data let rec Print. List (ss: list) = for item in ss do Console. Write. Line( item) Print. List Answer