Параллельные вычисления. Многозадачность и многопоточность

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

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

Создание многопоточных приложений может приводить к появлению дополнительных ошибок, не возникающих в однопоточных приложениях. Например, если один поток начинает изменять какой-либо ресурс, а другой пытается прочитать его значение до полного изменения. Для избавления от таких ошибок применяется синхронизация: при обращении потока к какому-то ресурсу применяются механизмы, заставляющие другие потоки, пытающиеся получить доступ к тому же ресурсу, приостановить свое выполнение, пока ресурс не будет освобожден. Однако использование синхронизации может приводить в свою очередь к другим ошибкам, например, так называемым 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();


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: