Составители:
Рубрика:
средства взаимной синхронизации, а также организация локаль-
ной для потоков памяти. По большей части .NET Framework пре-
доставляет надстройку над средствами операционной системы.
• Работа с различными процессами и доменами приложений.
В основном это надстройки над абстракциями высокого уровня,
такими как RPC, COM объекты и пр.
Как и в случае API системы, такое деление не является строгим – ре-
альные средства «пересекают» границы этих категорий. При этом не все ме-
ханизмы, предоставляемые операционной системой, нашли свое отражение
в .NET Framework; равно как многие механизмы, оставаясь внешне схожи-
ми с механизмами операционной системы, существенным образом измени-
лись. Так, например, .NET не поддерживает волокна; операции асинхрон-
ного ввода-вывода основываются на использовании отдельных потоков,
выполняющих фоновые синхронные операции ввода-вывода, и др.
Вообще говоря, использование фоновых потоков для выполнения
специфических задач поддержки инфраструктуры .NET стало общим мес-
том. При запуске .NET приложения автоматически создается пул потоков,
используемый CLR по мере надобности. Этот пул применяется, в частно-
сти, в ситуациях, связанных с обработкой асинхронных запросов и асин-
хронного ввода-вывода, когда в рамках операционной системы реально ис-
пользовался бы основной поток в состоянии ожидания оповещения.
.NET разрабатывался с учетом возможности переноса на другие плат-
формы. Для облегчения этого процесса в архитектуру CLR включен спе-
циальный уровень адаптации к платформе (PAL, Platform Adaptation Layer),
являющийся прослойкой между основными механизмами CLR и уровнем
операционной системы. В случае платформы Windows уровень PAL доста-
точно прост – считается, что PAL должен предоставить для CLR функци-
ональность, аналогичную Win32 API. Однако в случае иных платформ PAL
может оказаться достаточно сложным и многоуровневым. Например, в
случае платформ, не поддерживающих многопоточные приложения, PAL
должен самостоятельно реализовать недостающую функциональность.
В данном курсе рассматриваются основные средства реализации
многопоточных приложений и не затрагиваются вопросы создания ASP,
COM-объектов и многого другого.
7.3.1. Потоки и пул потоков
Потоки в .NET реализованы на основе модели потоков операцион-
ной системы и не предусматривают средств управления волокнами. Если
система не поддерживает многопоточные приложения, то PAL должен бу-
дет реализовать собственный планировщик потоков режима пользователя
(и в этом случае окажется, что потоки .NET являются аналогами волокон,
а не потоков ядра).
Разработка параллельных приложений для ОС Windows
251
si.cb = sizeof(si);
if ( ac != 2 || strcmp( av[1], “slave” ) ) {
for ( i = 0; i < 256; i++ ) shared[i] = 256-i;
/* первый экземляр с общими данными */
CreateProcess(
NULL, “fsec.exe slave”, DEFAULT_SECURITY,
DEFAULT_SECURITY, FALSE, NORMAL_PRIORITY_CLASS,
NULL, NULL, &si, &pi
);
CloseHandle( pi.hThread );
WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
} else {
/* второй экземляр с общими данными */
for ( i = 0; i < 256; i++ )
if ( shared[i] != 256-i ) break;
if ( i != 256 ) { /* ОШИБКА! */ }
}
return 0;
}
Некоторое неудобство, связанное с необходимостью использовать од-
но и то же приложение, можно легко обойти, если разделяемый сегмент по-
местить в разделяемую библиотеку – тогда один и тот же образ библиотеки
может быть подключен к разным приложениям, что позволит им обмени-
ваться данными. В этом варианте надо только учитывать, что адреса, в ко-
торые будет помещена библиотека, в разных процессах могут отличаться.
7.3. Параллельные операции в .NET
Реализация параллельного выполнения кода в .NET основана на ба-
зовых механизмах, предоставляемых ядром операционной системы
Windows. Аналогично средствам операционной системы средства .NET
Framework могут быть разделены на следующие группы:
• Обработка асинхронных запросов. Сюда относятся средства для
выполнения асинхронных операций ввода-вывода, средства для
работы с очередями сообщений, некоторые надстройки для ра-
боты в сетевой среде (ASP, XML и др.) и средства поддержания
инфраструктуры COM объектов.
• Организация многопоточных приложений. Сюда относятся сред-
ства создания потоков, управления ими, включая пулы потоков,
250
CIL и системное программирование в Microsoft .NET
250 CIL и системное программирование в Microsoft .NET Разработка параллельных приложений для ОС Windows 251 si.cb = sizeof(si); средства взаимной синхронизации, а также организация локаль- if ( ac != 2 || strcmp( av[1], “slave” ) ) { ной для потоков памяти. По большей части .NET Framework пре- for ( i = 0; i < 256; i++ ) shared[i] = 256-i; доставляет надстройку над средствами операционной системы. /* первый экземляр с общими данными */ • Работа с различными процессами и доменами приложений. CreateProcess( В основном это надстройки над абстракциями высокого уровня, NULL, “fsec.exe slave”, DEFAULT_SECURITY, такими как RPC, COM объекты и пр. DEFAULT_SECURITY, FALSE, NORMAL_PRIORITY_CLASS, Как и в случае API системы, такое деление не является строгим – ре- NULL, NULL, &si, &pi альные средства «пересекают» границы этих категорий. При этом не все ме- ); ханизмы, предоставляемые операционной системой, нашли свое отражение CloseHandle( pi.hThread ); в .NET Framework; равно как многие механизмы, оставаясь внешне схожи- ми с механизмами операционной системы, существенным образом измени- WaitForSingleObject( pi.hProcess, INFINITE ); лись. Так, например, .NET не поддерживает волокна; операции асинхрон- CloseHandle( pi.hProcess ); ного ввода-вывода основываются на использовании отдельных потоков, } else { выполняющих фоновые синхронные операции ввода-вывода, и др. /* второй экземляр с общими данными */ Вообще говоря, использование фоновых потоков для выполнения for ( i = 0; i < 256; i++ ) специфических задач поддержки инфраструктуры .NET стало общим мес- if ( shared[i] != 256-i ) break; том. При запуске .NET приложения автоматически создается пул потоков, if ( i != 256 ) { /* ОШИБКА! */ } используемый CLR по мере надобности. Этот пул применяется, в частно- } сти, в ситуациях, связанных с обработкой асинхронных запросов и асин- return 0; хронного ввода-вывода, когда в рамках операционной системы реально ис- } пользовался бы основной поток в состоянии ожидания оповещения. Некоторое неудобство, связанное с необходимостью использовать од- .NET разрабатывался с учетом возможности переноса на другие плат- но и то же приложение, можно легко обойти, если разделяемый сегмент по- формы. Для облегчения этого процесса в архитектуру CLR включен спе- местить в разделяемую библиотеку – тогда один и тот же образ библиотеки циальный уровень адаптации к платформе (PAL, Platform Adaptation Layer), может быть подключен к разным приложениям, что позволит им обмени- являющийся прослойкой между основными механизмами CLR и уровнем ваться данными. В этом варианте надо только учитывать, что адреса, в ко- операционной системы. В случае платформы Windows уровень PAL доста- торые будет помещена библиотека, в разных процессах могут отличаться. точно прост – считается, что PAL должен предоставить для CLR функци- ональность, аналогичную Win32 API. Однако в случае иных платформ PAL может оказаться достаточно сложным и многоуровневым. Например, в 7.3. Параллельные операции в .NET случае платформ, не поддерживающих многопоточные приложения, PAL должен самостоятельно реализовать недостающую функциональность. Реализация параллельного выполнения кода в .NET основана на ба- В данном курсе рассматриваются основные средства реализации зовых механизмах, предоставляемых ядром операционной системы многопоточных приложений и не затрагиваются вопросы создания ASP, Windows. Аналогично средствам операционной системы средства .NET COM-объектов и многого другого. Framework могут быть разделены на следующие группы: • Обработка асинхронных запросов. Сюда относятся средства для 7.3.1. Потоки и пул потоков выполнения асинхронных операций ввода-вывода, средства для Потоки в .NET реализованы на основе модели потоков операцион- работы с очередями сообщений, некоторые надстройки для ра- ной системы и не предусматривают средств управления волокнами. Если боты в сетевой среде (ASP, XML и др.) и средства поддержания система не поддерживает многопоточные приложения, то PAL должен бу- инфраструктуры COM объектов. дет реализовать собственный планировщик потоков режима пользователя • Организация многопоточных приложений. Сюда относятся сред- (и в этом случае окажется, что потоки .NET являются аналогами волокон, ства создания потоков, управления ими, включая пулы потоков, а не потоков ядра).
Страницы
- « первая
- ‹ предыдущая
- …
- 130
- 131
- 132
- 133
- 134
- …
- следующая ›
- последняя »