Разработка прикладных программ для ОС WINDOWS с помощью интегрированных сред Delphi / C++Builder. Баканов В.М. - 9 стр.

UptoLike

Составители: 

- 9 -
лельное выполнение не является приоритетным - передача управления от
одной задачи к другой производится в явном виде самими этими задачами.
WINDOWS функционирует как многозадачная ОС каждый раз, когда при-
кладная программа анализирует очередь сообщений. Если предназначенных
данной программе сообщений не оказывается, WINDOWS начинает искать
сообщения для других активных в данный момент программ и
передает
управление той, для которой сообщение имеется; далее процесс повторяется.
При разработке предназначенной для WINDOWS программы ее необхо-
димо структурировать таким образом, чтобы она могла поддерживать пере-
дачу управления по вышеописанной схеме. Если не принять соответствую-
щих мер, внешне корректная вновь созданная программа, возможно, будет
работоспособной, но запущенные вместе с ней другие
программы сильно
рискуют остановиться вовсе (программа монопольно займет ресурсы всей
ОС).
Заметим, что вышеприведенный метод реализации многозадачности в
WINDOWS носит название кооперативной многозадачности (cooperative
multitasking) и является единственным для WINDOWS'3.1; в ОС
WINDOWS'9x (и, соответственно, WINDOWS’NT) реализован метод так на-
зываемой вытесняющей многозадачности (preemptive multitasking), при
этом ОС сама решает, у какой программы отобрать управление
и какой его
передать (кооперативная многозадачность оставлена в WINDOWS'9x только
в целях поддержки 16-битных приложений). Каждое 32-битное приложение в
WINDOWS'9x имеет отдельную очередь сообщений и не зависит от того, как
другие задачи работают со своими очередями (поэтому ситуация 'повисания
системы' вследствие слишком редкой проверки очереди сообщений 16-
битным приложением теоретически невозможна).
Кроме сказанного
, 32-битные приложения в WINDOWS'9x могут исполь-
зовать особый механизм - многопоточность (multithreading). В принятой
для WINDOWS'9x терминологии исполняемое 32-битное приложение назы-
вается процессом (process); процесс состоит как минимум из одного потока.
Поток (thread) - часть кода программы, которая может выполняться од-
новременно с другими частями кода; потоки в пределах одного процесса ис-
пользуют одно
адресное пространство, описатели оьъектов и иные общие ре-
сурсы, но имеют отдельные счетчики команд; приоритетностью выполнения
потоков (как и процессов) управляет ядро ОС на основе системы приорите-
тов. Потоки являются средством обеспечения параллельности обработки
данных и часто используются для выполнения в программе асинхронных опе-
раций (asynchronous operations) - операций, которые могут быть инициали
-
зированы в любое время безотносительно к основному течению программы
(лежащий на поверхности пример - периодическое сохранение редактируе-
мого документа или опрос устройства пользовательского ввода - например,
мышиили клавиатуры). Потоки требуют меньших издержек, создаются (и
                                    -9-


лельное выполнение не является приоритетным - передача управления от
одной задачи к другой производится в явном виде самими этими задачами.
WINDOWS функционирует как многозадачная ОС каждый раз, когда при-
кладная программа анализирует очередь сообщений. Если предназначенных
данной программе сообщений не оказывается, WINDOWS начинает искать
сообщения для других активных в данный момент программ и передает
управление той, для которой сообщение имеется; далее процесс повторяется.
   При разработке предназначенной для WINDOWS программы ее необхо-
димо структурировать таким образом, чтобы она могла поддерживать пере-
дачу управления по вышеописанной схеме. Если не принять соответствую-
щих мер, внешне корректная вновь созданная программа, возможно, будет
работоспособной, но запущенные вместе с ней другие программы сильно
рискуют остановиться вовсе (программа монопольно займет ресурсы всей
ОС).
   Заметим, что вышеприведенный метод реализации многозадачности в
WINDOWS носит название кооперативной многозадачности (cooperative
multitasking) и является единственным для WINDOWS'3.1; в ОС
WINDOWS'9x (и, соответственно, WINDOWS’NT) реализован метод так на-
зываемой вытесняющей многозадачности (preemptive multitasking), при
этом ОС сама решает, у какой программы отобрать управление и какой его
передать (кооперативная многозадачность оставлена в WINDOWS'9x только
в целях поддержки 16-битных приложений). Каждое 32-битное приложение в
WINDOWS'9x имеет отдельную очередь сообщений и не зависит от того, как
другие задачи работают со своими очередями (поэтому ситуация 'повисания
системы' вследствие слишком редкой проверки очереди сообщений 16-
битным приложением теоретически невозможна).
   Кроме сказанного, 32-битные приложения в WINDOWS'9x могут исполь-
зовать особый механизм - многопоточность (multithreading). В принятой
для WINDOWS'9x терминологии исполняемое 32-битное приложение назы-
вается процессом (process); процесс состоит как минимум из одного потока.
   Поток (thread) - часть кода программы, которая может выполняться од-
новременно с другими частями кода; потоки в пределах одного процесса ис-
пользуют одно адресное пространство, описатели оьъектов и иные общие ре-
сурсы, но имеют отдельные счетчики команд; приоритетностью выполнения
потоков (как и процессов) управляет ядро ОС на основе системы приорите-
тов. Потоки являются средством обеспечения параллельности обработки
данных и часто используются для выполнения в программе асинхронных опе-
раций (asynchronous operations) - операций, которые могут быть инициали-
зированы в любое время безотносительно к основному течению программы
(лежащий на поверхности пример - периодическое сохранение редактируе-
мого документа или опрос устройства пользовательского ввода - например,
‘мыши’ или клавиатуры). Потоки требуют меньших издержек, создаются (и