На правах рекламы:
ISSN 0236-235X (P)
ISSN 2311-2735 (E)

Авторитетность издания

ВАК - К1
RSCI, ядро РИНЦ

Добавить в закладки

Следующий номер на сайте

4
Ожидается:
09 Сентября 2024

Повышение эффективности создания экземпляров классов при использовании компонентной технологии проектирования

Статья опубликована в выпуске журнала № 4 за 2008 год.
Аннотация:
Abstract:
Авторы: Нечаев П.Д. () - , Кораблин Ю.П. (y.p.k@mail.ru) - Российский государственный социальный университет, г. Москва (профессор), Москва, Россия, доктор технических наук
Ключевые слова: проектирование, corba, программирование
Keywords: design, , programming
Количество просмотров: 14033
Версия для печати
Выпуск в формате PDF (8.40Мб)

Размер шрифта:       Шрифт:

Большинство разработчиков программного обеспечения используют компонентную технологию при разработке приложений, которая является развитием объектно-ориентированной технологии проектирования [1]. Технология объединяет гибкость в выборе необходимых компонент, свойственную разработке приложения собственными силами, с надежностью кода и функциональной полнотой, проверенными многократным использованием, характерным для коммерческих программных продуктов. При компонентном подходе, например в рамках антивирусных разработок, существенным является скорость обработки данных, поэтому скорость создания экземпляров классов сказывается на скорости работы антивирусной системы. Если рассмотреть известную технологию COM (Component Object Model), а вернее, ее техническую реализацию на платформах семейства Microsoft Windows [2,3], проблемы связаны с временными затратами на создание и поиск классов нужного типа. Работа с используемым для хранения метаинформации о модулях и классах системным реестром Windows, как известно, занимает немалую часть процессорного времени. Кроме того, нельзя явно указать модуль реализации класса, что избавило бы от временных затрат на его поиск при создании экземпляра. То же относится и к различным реализациям CORBA, где за поиск объектов отвечает уровень ORB [4,5].

 

Операция выделения памяти достаточно долгая [6], и целесообразно было бы в некоторых случаях для создания экземпляров классов предоставлять извне либо заранее выделенную оптимальным способом память, либо память стека. Последний случай можно широко применять в рекурсивных функциях при разборе составных форматов данных. Такой подход обеспечит работу с разными типами данных, сохранит высокую скорость выполнения и позволит быстро создать нужный экземпляр класса и тут же освободить его, чтобы не занимал лишние ресурсы компьютера. Идея организации собственного управления памятью не нова, но в компонентных технологиях не применяется в силу универсальности последних. Таким образом, возникает идея об обеспечении возможности создания экземпляров классов на сторонней памяти, то есть памяти, предоставляемой извне и не выделяемой самим экземпляром.

Недостатком модели COM является то, что в ней не предусмотрены стандартные способы указания сторонней памяти для создания экземпляра, хотя создание специализированных интерфейсов для решения этих задач возможно. Изначально сама концепция COM не предусматривала это. Дело в том, что, когда экземпляр не управляет памятью, на которой он создан, управление должно осуществляться извне, следовательно, теряется простота управления временем жизни экземпляров.

В модели CORBA потенциально существует возможность собственного управления памятью для создания экземпляров реализаций объектов (сервантов), но для этого необходимо наличие некоего идентификатора объекта (объектной ссылки), что накладывает дополнительные расходы ресурсов на его поддержку.

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

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

Тестирование скорости проводилось путем замера времени на создание и уничтожение сначала 1 экземпляра 100 тыс. раз, затем на одновременное создание 500 экземпляров и их уничтожение 200 раз, затем на создание и уничтожение 1 тыс. экземпляров 100 раз и т.д. до создания и уничтожения 20 тыс. экземпляров 5 раз, то есть во всех итерациях общее количество экземпляров почти всегда было 100 тыс. Для анализа поведения при параллельном выполнении тестирование проводилось последовательно сначала на одном потоке, затем на двух и на четырех. Данная методика теста была выбрана для того, чтобы оценить скорость при влиянии распределения памяти при разном количестве одновременно созданных экземпляров. Эта процедура выполнялась 12 раз для последующего усреднения результатов и сглаживания погрешностей, поскольку компьютеры целевого назначения не являются вычислительными системами реального времени. Тестирование проходило под управлением Windows XP Sp2.

Первый набор тестов выполнялся на персональном компьютере с процессором AMD Athlon семейства x86, тактовой частотой 1,6 ГГц, объемом внутреннего кэша процессора 512 КБ, оперативной памятью объемом 1 ГБ, жестким диском объемом 200 ГБ ATA100. В таблице 1 приведены полученные в результате тестирования значения времени (в миллисекундах) на одновременное создание экземпляров классов, а также соответствие параметров тестирования условным номерам, на которые ссылаются горизонтальные оси приводимых далее графиков.

Таблица 1

Сводная таблица результатов первого набора тестов

Номер теста

Количество экземпляров

Тип теста

CORBA

COM

Разработка

Собственная память

Сторонняя память

1

1

400

518

236

134

138

2

500

460

504

236

138

105

3

1000

893

513

237

141

107

4

2000

870

544

238

148

107

5

3030

906

562

241

164

108

6

4000

903

572

237

171

109

7

5000

1031

590

245

180

111

8

10000

1293

613

288

216

148

9

20000

1151

628

288

221

151

10

25000

1445

627

285

223

152

11

33333

1159

622

285

230

151

12

50000

1192

624

288

237

150

13

100000

1115

640

285

242

151

Первый тип теста показывает сравнительное время на создание экземпляра и его уничтожение с помощью разработанной компонентной технологии (используются сторонняя память и явное указание модуля реализации) с применением технологий COM и CORBA. Результаты приведены на рисунке 1.

Подпись: Рис. 1	Рис. 2
Из полученных результатов видно, что разработанный подход к оптимизации создания экземпляров дает значительное преимущество по времени по сравнению с технологиями COM и CORBA, то есть экземпляры класса при использовании разработанной технологии можно создавать более эффективным образом, используя заранее выделенную память или память стека или уже зная модуль реализации. Кроме того, дополнительная эффективность разработанного подхода проявляется и при росте одновременно созданных экземпляров, так как в этом случае увеличивается время выделения памяти в моделях COM и CORBA, что не наблюдается при применении разработанной технологии. Данный показатель важен, так как, например, при разборе составных (контейнерных) данных количество одновременно созданных экземпляров может быть велико и преимущество предложенной технологии существенно скажется на повышении скорости данного процесса.

Произведем сравнительный замер времени на создание экземпляра с помощью разработанной компонентной технологии на сторонней и собственной памяти, причем для создания экземпляра используем заранее полученную входную точку класса, чтобы в тесте не учитывалось время на загрузку физического модуля и поиск по идентификатору класса. Тест отражает результаты создания экземпляров класса на собственной и сторонней памяти (рис. 2).

Из результатов видно, что создание экземпляров на сторонней памяти происходит гораздо быстрее, нежели с использованием собственной процедуры выделения памяти. На оси X располагается количество одновременно созданных экземпляров, оси Y – время создания. Графики иллюстрируют рост времени создания при росте количества одновременно созданных экземпляров, причем в случае собственного выделения памяти время сильно растет, поскольку, чем больше одновременных выделений памяти, тем больше затраты времени на новое выделение. Время же создания с использованием сторонней памяти практически не меняется с одновременным ростом количества экземпляров. Резкий скачок времени в середине обоих графиков обусловлен тем, что процессор исчерпал внутренний кэш для операций с памятью. В тесте размер каждого экземпляра составлял около 100 байт, количество одновременно созданных экземпляров на момент, предшествующий скачку, составляет 5 тыс. и на момент скачка 10 тыс., то есть соответственно 500 КБ и 1 МБ. Размер внутреннего кэша процессора, на котором производился тест, составлял 512 КБ, этим и объясняется скачок времени. Разница во времени между двумя типами создания постепенно возрастает, следовательно, происходит существенное увеличение производительности при одновременном создании большого числа экземпляров на сторонней памяти, что подтверждает эффективность и производительность примененного подхода при создании большого количества экземпляров.

Подпись: Рис. 3	Рис. 4
Второй набор тестов производился для анализа скорости параллельного создания экземпляров на многоядерном процессоре. По своему типу тест совпадает с первым тестом по скорости, но в данном случае последовательно создавались экземпляры на одном потоке, затем на двух и на четырех. В таблице 2 приведены полученные результаты.

Таблица 2

Сводная таблица результатов второго набора тестов

Номер теста

Количество экземпляров

Тип теста

1 поток

2 потока

4 потока

CORBA

COM

Разр.

CORBA

COM

Разр.

CORBA

COM

Разр.

1

1

242

354

194

484

207

174

534

207

173

2

500

292

361

190

553

212

175

560

210

176

3

1000

334

368

190

626

220

174

632

212

175

4

2000

356

371

190

673

226

176

734

220

175

5

3030

382

382

191

718

229

173

748

223

171

6

4000

395

382

191

728

229

175

765

229

173

7

5000

414

376

191

737

231

174

779

228

175

8

10000

454

384

191

792

240

173

862

236

175

9

20000

440

386

193

785

256

167

881

243

178

10

25000

482

386

193

814

262

171

901

248

178

11

33333

446

385

193

782

265

174

892

257

176

12

50000

459

385

192

807

273

174

943

259

175

13

100000

457

386

192

812

281

172

971

276

176

Тесты выполнялись на компьютере с 2-ядерным процессором Intel Core 2 Duo семейства x64 с частотой 2,13 ГГц, объемом внутреннего кэша процессора 2 МБ, оперативной памятью объемом 2 ГБ, жестким диском объемом 400 ГБ SATA-II.

График (рис. 3) показывает: при создании экземпляров с использованием компонентной технологии [7] время создания не зависит от одновременного количества экземпляров. Для технологий COM и CORBA картина схожа с аналогичным первым тестом, при этом лишь пропорционально уменьшилось время в соответствии с увеличением тактовой частоты процессора. Также исчез скачок времени при суммарном объеме используемой экземплярами памяти в 512 КБ, поскольку кэш данного процессора составляет 2 МБ, то есть это еще раз подтверждает природу скачка первого теста.

При тестировании на двух потоках (рис. 4) выявилось резкое увеличение скорости создания по сравнению с одним потоком экземпляров классов с использованием COM, то есть для этой технологии положительно сказалось распараллеливание, приведшее к увеличению скорости примерно в 1,7 раза. Результаты использования COM почти совпадают в начале графика с разработанной технологией, однако график продолжает расти с возрастанием количества одновременно создаваемых экземпляров. Для разработанной технологии скорость увеличилась всего в 1,1 раза, но скорость создания экземпляров осталась постоянной.

Для технологии CORBA распараллеливание оказалось пагубным – скорость уменьшилась. Предположительно, подобный результат связан с потерей времени на внутренних синхронизациях.

При сравнении времени создания экземпляров уже на четырех потоках на 2-ядерном процессоре тест показал почти одинаковые с предыдущим результаты, это свидетельствует о том, что реальное распараллеливание идет на двух ядрах процессора и дальнейшее увеличение количества потоков не играет роли.

Список литературы

1.   Фаулер М. Рефакторинг: улучшение существующего кода. / Пер. с англ. – СПб: Символ-Плюс, 2005. – 432 с.

2.   Деннинг А. ActiveX для профессионалов. – СПб: Питер, 1998. – 624 с.

3.   Роджерсон Д. Основы COM. / Пер. с англ. – М.: Русская редакция, 1997. – 376 с.

4.   Common Object Request Broker Architecture (CORBA), v 3.0 (http://www.omg.org/docs/formal/02-06-37.pdf).

5.   Орлик С. В ожидании CORBA 3.0. 1999 (http://www. osp.ru/text/302/179690).

6.   Maurice J. Bach Архитектура операционной системы UNIX. 1996 (http://www.opennet.ru/docs/RUS/unix).

7.   Нечаев П.Д. Компонентная модель на основе оптимизации и расширения COM. // Программные продукты и системы. – 2008. – № 1. – С. 37–39.


Постоянный адрес статьи:
http://swsys.ru/index.php?page=article&id=1623&lang=&like=1
Версия для печати
Выпуск в формате PDF (8.40Мб)
Статья опубликована в выпуске журнала № 4 за 2008 год.

Возможно, Вас заинтересуют следующие статьи схожих тематик: