Часть II. Объектно-ориентированное программирование
ществуют ситуации, когда единственный поток приложения сильно за-
медляет решение задачи из-за каких-то длительных операций. Напри-
мер, таких как вывод на печать большой группы данных. Естественно,
не выгодно ждать полного окончания вывода данных на печать, когда в
приложении требуется еще много чего выполнить. Например, пользова-
тель приложения в момент печати мог бы просматривать базу данных
или выполнять иные какие-то действия, которые заложены в приложе-
нии. То есть, как говорят, работать асинхронно. А для организации та-
ким образом работы создаются (порождаются главным потоком с по-
мощью специального метода
CreateThread()
) новые потоки, в каждом
из которых выполняется своя группа действий. Эти вторичные потоки
разгружают главный поток и ускоряют процесс решения задачи. Но при
организации вторичных потоков приходится делиться ресурсами маши-
ны, во-первых. А во-вторых, потокобезопасность снижается, т. к. может
выйти из строя какой-то поток. Завершение какого-то вторичного (ра-
бочего) потока, как и его запуск, не влияет ни на главный поток, ни на
все остальные, т. к. все они изолированы друг от друга. Как физически
происходит многопотоковая работа? Если процессор машины не под-
держивает многопоточную работу, то происходит так называемое кван-
тование времени: поочередно время и разделяемые ресурсы, естествен-
но, выделяются каждому потоку. Остальные потоки ждут своей очереди
на получение доступа к процессору и ресурсам.
Процесс исполняется за счет запуска и выполнения неких программ
в формате DLL или EXE, которые подключаются к нему. Эти програм-
мы называются
сборками
или
модулями
.
А как организовано взаимодействие между процессами и потоками
в рамках платформы .NET? Конечно, за счет библиотек базовых классов.
Существует пространство имен
System.Diagnostics
, содержащее типы,
которые обеспечивают это взаимодействие. Далее приводятся некото-
рые типы из
System.Diagnostics
.
Process
— предоставляет инструменты доступа к локальным и уда-
ленным процессам, позволяет запускать и останавливать процессы
программным способом.
ProcessModule
— предоставляет модуль типа dll или exe, который
может загружаться в определенный процесс.
ProcessModuleCollection
— позволяет создавать строго типизиро-
ванную коллекцию объектов типа
ProcessModule
.
ProcessStartInfo
— позволяет указывать набор значений, которые
можно задавать при запуске процесса методом
Process.Start()
.
Do'stlaringiz bilan baham: |