Common Intermediate Language и системное программирование в Microsoft.Net. Макаров А.В - 7 стр.

UptoLike

Глава 1.
Введение в архитектуру
Microsoft .NET Framework
1.1. Знакомство с .NET
Без всякого преувеличения можно сказать, что платформа .NET сто-
ит в одном ряду с самыми значительными достижениями корпорации
Microsoft. Более того, с точки зрения программиста, работающего в обла-
сти создания компиляторов и других средств разработки программ, .NET
является технологией неизмеримо более привлекательной, чем все проду-
кты, ранее созданные в Microsoft.
Разработка платформы .NET началась в 1998 году. Изначально ей да-
ли рабочее название Project 42, которое затем было изменено на COM
Object Runtime (сокращенно, COR). Видимо, аббревиатура COR использо-
валась достаточно длительное время, так как ее до сих пор можно найти в
названиях dll-файлов и именах библиотечных функций. Потом платформа
сменила еще несколько названий: Lightning, COM+ 2.0, Next Generation
Web Services и, в конце концов, стала называться .NET Framework.
Спецификация основной части платформы .NET стандартизована
ассоциацией ECMA (European Computer Manufactures Association). Это оз-
начает, что корпорация Microsoft приветствует независимые реализации
платформы.
1.1.1. Главные темы
В этой книге, рассматривая возможности системного программиро-
вания в .NET, мы будем преследовать две главные цели: разработка мета-
инструментов и конструирование компиляторов.
1.1.1.1. Разработка метаинструментов
Создание любого программного продукта подразумевает знакомство
программиста с предметной областью. То есть разработчик бухгалтерской
программы должен в какой-то степени разбираться в бухучете, а создатель
Интернет-магазина – в принципах ведения торговли. Нетрудно догадать-
ся, что создание новых инструментов для разработки программ требует от
программиста знакомства с тем, с чем он и так хорошо знаком – с разра-
боткой программ! Наверное, поэтому это занятие столь увлекательно.
Введение в архитектуру Microsoft .NET Framework
1
Глава 7. Разработка параллельных приложений для ОС Windows . . . . . . 218
7.1. Применение потоков и волокон . . . . . . . . . . . . . . . . . . . . . . . 218
7.1.1. Пулы потоков, порт завершения ввода-вывода . . . . . 218
7.1.2. Память, локальная для потоков и волокон . . . . . . . . . 225
7.1.3. Привязка к процессору и системы с неоднородным
доступом к памяти . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
7.2. Взаимодействие процессов и потоков . . . . . . . . . . . . . . . . . . 231
7.2.1. Синхронизация потоков . . . . . . . . . . . . . . . . . . . . . . . . 231
7.2.2. Процессы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
7.3. Параллельные операции в .NET . . . . . . . . . . . . . . . . . . . . . . . 250
7.3.1. Потоки и пул потоков . . . . . . . . . . . . . . . . . . . . . . . . . . 251
7.3.2. Асинхронный ввод-вывод . . . . . . . . . . . . . . . . . . . . . . 255
7.3.3. Асинхронные процедуры . . . . . . . . . . . . . . . . . . . . . . . 257
7.3.4. Синхронизация и изоляция потоков . . . . . . . . . . . . . . 260
7.3.5. Таймеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Приложение A. Исходный код программы pegen . . . . . . . . . . . . . . . . . . 274
A.1. macros.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
A.2. pe.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
A.3. pe.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
A.4. main.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
Приложение Б. Исходный код программы CilCodec . . . . . . . . . . . . . . . 291
Приложение B. Исходный код программы Integral . . . . . . . . . . . . . . . . 302
B.1. Expr.cs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
B.2. Integral.cs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
xii
xii                                                                                                               Введение в архитектуру Microsoft .NET Framework                       1


Глава 7. Разработка параллельных приложений для ОС Windows . . . . . . 218
     7.1. Применение потоков и волокон . . . . . . . . . . . . . . . . . . . . . . . 218                          Глава 1.
           7.1.1. Пулы потоков, порт завершения ввода-вывода . . . . . 218
           7.1.2. Память, локальная для потоков и волокон . . . . . . . . . 225                                   Введение в архитектуру
           7.1.3. Привязка к процессору и системы с неоднородным
                  доступом к памяти . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230                 Microsoft .NET Framework
     7.2. Взаимодействие процессов и потоков . . . . . . . . . . . . . . . . . . 231
           7.2.1. Синхронизация потоков . . . . . . . . . . . . . . . . . . . . . . . . 231
           7.2.2. Процессы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243            1.1. Знакомство с .NET
     7.3. Параллельные операции в .NET . . . . . . . . . . . . . . . . . . . . . . . 250
           7.3.1. Потоки и пул потоков . . . . . . . . . . . . . . . . . . . . . . . . . . 251                         Без всякого преувеличения можно сказать, что платформа .NET сто-
                                                                                                                  ит в одном ряду с самыми значительными достижениями корпорации
           7.3.2. Асинхронный ввод-вывод . . . . . . . . . . . . . . . . . . . . . . 255
                                                                                                                  Microsoft. Более того, с точки зрения программиста, работающего в обла-
           7.3.3. Асинхронные процедуры . . . . . . . . . . . . . . . . . . . . . . . 257                         сти создания компиляторов и других средств разработки программ, .NET
           7.3.4. Синхронизация и изоляция потоков . . . . . . . . . . . . . . 260                                является технологией неизмеримо более привлекательной, чем все проду-
           7.3.5. Таймеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271           кты, ранее созданные в Microsoft.
Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273           Разработка платформы .NET началась в 1998 году. Изначально ей да-
                                                                                                                  ли рабочее название Project 42, которое затем было изменено на COM
Приложение A. Исходный код программы pegen . . . . . . . . . . . . . . . . . . 274                                Object Runtime (сокращенно, COR). Видимо, аббревиатура COR использо-
    A.1. macros.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274       валась достаточно длительное время, так как ее до сих пор можно найти в
    A.2. pe.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276   названиях dll-файлов и именах библиотечных функций. Потом платформа
    A.3. pe.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281   сменила еще несколько названий: Lightning, COM+ 2.0, Next Generation
                                                                                                                  Web Services и, в конце концов, стала называться .NET Framework.
    A.4. main.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
                                                                                                                       Спецификация основной части платформы .NET стандартизована
Приложение Б. Исходный код программы CilCodec . . . . . . . . . . . . . . . 291                                   ассоциацией ECMA (European Computer Manufactures Association). Это оз-
Приложение B. Исходный код программы Integral . . . . . . . . . . . . . . . . 302                                 начает, что корпорация Microsoft приветствует независимые реализации
    B.1. Expr.cs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302      платформы.
    B.2. Integral.cs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308      1.1.1. Главные темы
                                                                                                                      В этой книге, рассматривая возможности системного программиро-
                                                                                                                  вания в .NET, мы будем преследовать две главные цели: разработка мета-
                                                                                                                  инструментов и конструирование компиляторов.

                                                                                                                  1.1.1.1. Разработка метаинструментов
                                                                                                                       Создание любого программного продукта подразумевает знакомство
                                                                                                                  программиста с предметной областью. То есть разработчик бухгалтерской
                                                                                                                  программы должен в какой-то степени разбираться в бухучете, а создатель
                                                                                                                  Интернет-магазина – в принципах ведения торговли. Нетрудно догадать-
                                                                                                                  ся, что создание новых инструментов для разработки программ требует от
                                                                                                                  программиста знакомства с тем, с чем он и так хорошо знаком – с разра-
                                                                                                                  боткой программ! Наверное, поэтому это занятие столь увлекательно.