Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: XVIII Международной научно-практической конференции «Экспериментальные и теоретические исследования в современной науке» (Россия, г. Новосибирск, 21 мая 2018 г.)

Наука: Информационные технологии

Скачать книгу(-и): Сборник статей конференции

Библиографическое описание:
Ющенко М.В. ОЦЕНКА ЭФФЕКТИВНОСТИ СИНХРОННОЙ И АСИНХРОННОЙ МОДЕЛЕЙ СБОРА ТЕСТОВЫХ ДАННЫХ // Экспериментальные и теоретические исследования в современной науке: сб. ст. по матер. XVIII междунар. науч.-практ. конф. № 9(18). – Новосибирск: СибАК, 2018. – С. 38-44.
Проголосовать за статью
Дипломы участников
У данной статьи нет
дипломов

ОЦЕНКА ЭФФЕКТИВНОСТИ СИНХРОННОЙ И АСИНХРОННОЙ МОДЕЛЕЙ СБОРА ТЕСТОВЫХ ДАННЫХ

Ющенко Максим Викторович

магистрант кафедры Автоматическая Электросвязь Сибирского государственного университета телекоммуникаций и информатики,

 РФ, г. Новосибирск

АННОТАЦИЯ

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

Ключевые слова: асинхронное программирование; многопоточ­ность.

 

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

Целью данной статьи является оценка эффективности синхронной и асинхронной моделей программного обеспечения, выполняющего задачу сбора данных для проведения автоматических тестов. Эффективность работы моделей будет оцениваться по двум критериям: общее время выполнения программы и объем резидентной оперативной памяти, используемый программой. Чем меньшие значения принимают оба критерия, тем эффективнее работает программа.

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

Асинхронная программная модель построена на основе обра­ботчиevent loop), управляющего выполнением программных задач [2]. Любая задача в данной модели рассматривается как событие. Обработчик событий ведет очередь событий, в которую помещает каждую вновь поступающую задачу. Выполнение задач делегируется специальным программным функциям обработчика - корутинным генераторам. Главное отличие данной модели в том, что программа выполняется в одном потоке, а обработчик событий руководит пере­ключением контекста функций. То есть любая функция обработчика событий может прервать выполнение текущей задачи для того, чтобы переключиться на выполнение другой задачи. Точно так же возможно обратное переключение для завершения выполнения предыдущих задач.

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

 

Рисунок 1. Стенд для исследования

 

Стенд для исследования включает в себя три компонента:

  1. Web-сервер Apache2, работающий под управлением дистри­бутива Ubuntu 16.04.4 LTS. На сервере хранится набор тестовых сценариев, представляющий собой 1000 файлов формата xml размером 85 кБ в среднем на каждый файл.
  2. Персональный компьютер с установленным дистрибутивом Ubuntu 16.04.4 LTS, с которого запускаются программы сбора тестовых сценариев.
  3. Ethernet-коммутатор, связывающий персональный компьютер и Web-сервер в единую транспортную сеть, тем самым предоставляя обоим хостам возможность вести обмен сообщениями.

Идея исследования следующая: на персональном компьютере требуется запустить программу, которая отправляет HTTP-запросы к Web-серверу для загрузки всех тестовых сценариев, которые он хранит. На каждый полученный запрос Web-сервер отправляет HTTP-ответ, содержащий текст запрашиваемого сценария. Измеряются время работы программы и требуемый для нее объем оперативной памяти с момента отправки первого запроса до момента получения последнего ответа. Измерения проводятся для двух программ: в основе первой заложена асинхронная модель работы с сетью, а другая построена на синхронной модели с использованием одного, четырех и восьми потоков.

Обе программы разработаны с использованием интерпретатора CPython версии 3.6.4. Язык программирования Python имеет очень простой и гибкий синтаксис с автоматизированным управлением оперативной памятью, благодаря чему разработка программ на данном языке относительно занимает меньше времени, что очень подходит для решения задач автоматизации тестирования. В процессе разработки программ были использованы такие средства языка Python как:

  1. threading - стандартный модуль, содержащий инструментарий для многопоточного программирования.
  2. queue - стандартный модуль, предоставляющий различные виды очередей в качестве объектов синхронизации потоков.
  3. asyncio - стандартный модуль для организации асинхронной программной модели.
  4. requests - внешний модуль, предоставляющий высокоуровневый интерфейс для работы с сообщениями протокола HTTP.
  5. aiohttp - внешний модуль, аналог requests для использования внутри асинхронной среды.

Для измерения времени работы программы была использована функция time из одноименного стандартного модуля языка Python. Оценка потребления оперативной памяти программой была получена при помощи инструмента memory_profiler [3].

Результаты измерения времени работы программных моделей представлены на рисунке 2.

 

Рисунок 2. Оценка времени работы моделей

 

Исследование показало, что программа, основанная на одно­поточной синхронной модели, в рамках данного эксперимента имеет наибольшее время выполнения (17,947 с). Это связано с тем, что все задачи по загрузке тестовых сценариев выполняются строго после­довательно - не более одного открытого TCP-соединения в любой момент времени работы программы. Уменьшение времени работы синхронной модели достигается за счет увеличения количества ее программных потоков. Выполнение программы в 4 потока заняло 9,98 с, что меньше времени работы однопоточного сценария на 7,967 с. Такое сокращение времени было достигнуто за счет того, что одновременно могло обрабатываться не более 4-х TCP-соединений - по одному на каждый поток. Однако, увеличение числа потоков не всегда способно ускорить программу. Чем больше рабочих потоков имеет синхронная модель, тем больше накладных расходов на их обработку, тем меньше процессорного времени выделяется каждому потоку, тем медленнее работает программа. К тому же, с увеличением количества потоков возрастает время, которое тратится на синхронизацию их работы. Данный факт проявляется при работе 8-ми поточной синхронной модели. Время, за которое она выполняет поставленные задачи, составило 10,05 с, что на 0,881 с больше времени работы 4-х поточной модели. Лучший результат был достигнут асинхронной моделью - 9,169 с. Это связано с гораздо более эффективным использованием процессорного времени по сравнению с синхронной моделью. Во время ожидания ответа от сервера обработчик событий прерывает выпол­нение функции, отправившей запрос, и запускает обработку других задач, стоящих в очереди. По приходу ответа обработчик событий возобновит работу ранее прерванной функции и завершит данную задачу.

Результаты измерения потребляемой памяти исследуемыми моделями представлены на рисунке 3. Синхронная однопоточная модель потребляет меньше всего оперативной памяти ОС. Чем больше количество потоков, тем больше оперативной памяти ОС выделяет на выполнение программы. Больше всего оперативной памяти требуется для работы асинхронной программной модели. Это связано с тем, что в ее концепции нет ограничения на количество одновременно открытых TCP-сессий, как в синхронной модели. В данном случае асинхронная модель способна создавать и поддерживать неограниченно много TCP-сессий, каждой из которых будет выделен буфер определенного размера. Это видно по монотонному росту графика использования памяти асинхронной модели, он гораздо более пологий, чем для трех остальных случаев.   

 

Рисунок 3. Оценка потребления памяти моделями

 

По результатам проведенного исследования можно сформулировать следующие выводы:

  1. Асинхронная программная модель гораздо более эффективно использует процессорное время, чем синхронная модель, за счет чего имеет меньшее время выполнения. Расход оперативной памяти асин­хронной программой напрямую зависит от количества выполняемых задач. Синхронная модель на малом количестве задач может работать не менее эффективно, чем асинхронная. Но с большим объемом задач асинхронная модель справляется гораздо лучше синхронной.
  2. Асинхронная модель очень хорошо подходит для выполнения только тех задач, которые можно выполнить используя неблокирующие операции (например, работа с сетью). Иначе данная модель теряет свои преимущества и проигрывает в производительности синхронной модели, где каждую блокирующую операцию можно поместить в отдельный поток. То же самое касается вычислительных задач, требующих значи­тельное время на выполнение.
  3. Для выполнения задач, сочетающих блокирующие и неблоки­рующие операции, можно использовать гибридную программную модель: асинхронный обработчик событий, делегирующий выполнение блоки­рующих вызовов пулу потоков.

 

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

  1. Савин Р. Тестирование Дот Ком, или Пособие по жестокому обращению с багами в интернет-стартапах. Издательство Дело. 312 с. 2007.
  2. Caleb Hattingh. Using Asyncio in Python 3. O'Reilly Media. 2018.
  3. Memory Profiler - [Электронный ресурс]. URL: https://github.com/pythonprofilers/memory_profiler.
Проголосовать за статью
Дипломы участников
У данной статьи нет
дипломов

Оставить комментарий

Форма обратной связи о взаимодействии с сайтом
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.