multithread lecture.ppt
- Количество слайдов: 15
Многопоточность Процесс • Создается операционной системой при запуске приложения • Имеет отдельное адресное пространство, физически недоступно для других процессов Поток • Работает внутри процесса • Является потоком выполняющихся по очереди команд центрального процессора. • Потоки одного процесса имеют общую память
Многопоточность Средства запуска потока на выполнение: 1. System. Threading. Thread Позволяет контролировать поток: Пауза, продолжение, останов(через Exception), пр. 2. Delegate. Begin. Invoke Весь контроль на разработчике Средства синхронизации потоков: Threading. Thread. Wait(
Применение многопоточного выполнения • Фоновое выполнение вычислений. • Организация работы с медленным оборудованием • Ускорение выполнения на многопроцессорных системах
Проблемы • Ограничения библиотек. Например Win API -> Windows Forms. • Совместный доступ к одной памяти • Взаимная блокировка (Deadlock) • Порождение чрезмерно большого количества потоков
Вызов процедур в другом потоке. Новый поток (вычисления) Поток окна. Обработка очереди сообщений Form. Invoke Исполнения функции
Средства синхронизации потоков в. NET • Критическая секция (lock) • Wait. Handle • Очередь (queue<>)
Чистая функция • Возвращает всегда одно и то же значение при одинаковом наборе аргументов, не зависит от состояния программы (детерминированность) • Не обладает побочными эффектами, не изменяет состояние программы
Анонимные делегаты 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, если оно является степенью двойки, NO - иначе Пример вводимых данных 8 Пример выводимых данных YES Пример вводимых данных 22 Пример выводимых данных NO
Решение 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. . 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 (0
Решение 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


