Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прога - ответы2.docx
Скачиваний:
19
Добавлен:
23.04.2019
Размер:
206.38 Кб
Скачать
  1. Параллельные вычисления. Многозадачность и многопоточность.

Процесс - концепция уровня ОС, описывающая ресурсы (память, потоки, подключенные библиотеки и проч.), используемые выполняющейся программой. Системы, которые могут выполнять много процессов одновременно, называются многозадачными.

Каждый процесс имеет один первичный поток, и может создавать дополнительные. Поток представляет собой выполняющийся одновременно с другими потоками программный код. Все потоки в рамках одного процесса разделяют общую память. Приложения, использующие несколько параллельно выполняющихся потоков, называются многопоточными.

Создание многопоточных приложений может приводить к появлению дополнительных ошибок, не возникающих в однопоточных приложениях. Например, если один поток начинает изменять какой-либо ресурс, а другой пытается прочитать его значение до полного изменения. Для избавления от таких ошибок применяется синхронизация: при обращении потока к какому-то ресурсу применяются механизмы, заставляющие другие потоки, пытающиеся получить доступ к тому же ресурсу, приостановить свое выполнение, пока ресурс не будет освобожден. Однако использование синхронизации может приводить в свою очередь к другим ошибкам, например, так называемым deadlock-ам, когда два или более потоков взаимно ожидают освобождения захваченных остальными ресурсов. При этом возобновление их работы становится невозможным. Также данные ошибки из-за трудности предсказания работы планировщика, управляющего выделением процессорного времени потокам, часто могут быть трудно воспроизводимыми и плохо поддаваться отладке. Чтобы избежать таких проблем, многопоточные приложения требуют внимательного и аккуратного подхода к разработке архитектуры взаимодействия потоков.

Для получения информации о процессах и потоках в .NET используются классы пространства имен System.Diagnostic, например:

Process

Предоставляет доступ к локальным и удаленным процессам, а также позволяет запускать и останавливать процессы программным образом

ProcessModule

Представляет модуль (*.dll или *.ехе), который должен загружаться в определенный процесс.

ProcessStartlnfо

Позволяет указывать набор значений, которые должны использоваться при запуске процесса посредством метода Process.Start ()

ProcessThread

Представляет поток внутри определенного процесса. Этот тип применяется для диагностики потоков в процессе, но не для запуска новых

Некоторые члены класс Process:

Handle

Дескриптор (IntPtr), который был назначен процессу операционной системой

Id

Идентификатор (PID) соответствующего процесса.

MachmeName

Имя компьютера, на котором выполняется соответствующий процесс.

MainWmdowTitle

Заголовок главного окна процесса (если нет главного окна — пустая строка).

ProcessName

Это свойство позволяет получать имя процесса (совпадает с именем приложения)

Responding

Отвечает ли приложение на запросы системы (не зависло ли оно)

StartTime

Время запуска процесса

Threads

Потоки процесса

CloseMainWindow()

Отправляет процессу с GUI сообщения о закрытии главного окна

GetCurrentProcess()

Возвращает текущий активный процесс

GetProcesses()

Возвращает списо выполняющихся в данный момент процессов

Kill()

Завершает соответствующий процесс

Start ()

Запускает новый процесс (имеет несколько версий, позволяющих контролировать запуск, передавать приложению параметры и т.п.)

Пример запуска приложения при помощи метода Start():

Process ieProc = null;

// Запустить Internet Explorer и перейти на страницу facebook.com.

ieProc = Process.Start("IExplore.exe", "www.facebook.com");

Console.ReadLine();

// Завершить процесс

ieProc.Kill();