Читаем Компьютерра PDA 19.06.2010-25.06.2010 полностью

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

Отсюда возникает желание создавать многопоточные "быстрые" приложение, однако, затрачивая на это меньше времени и сил. Было бы здорово, если бы процесс создания, контроля, синхронизации потоков проходил в автоматическом режиме без участия разработчика.

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

И так, знакомьтесь – MapReduce. Эта модель программирования для обработки больших объемов данных. Ее создателем считается небезызвестная компания Google. В своей работе она активно применяет этот механизм, что позволяет говорить о его удобности, быстродействии и практичности.

Рассмотрим обработку данных с применением этой технологии. MapReduce включает в себя 3 этапа. Подготовка данных, определение функции map и определении функции reduce. Рассмотрим каждый их этих этапов.

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

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

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

После этого, для запуска обработки данных необходимо вызвать всего одну функцию (ее название зависит от реализации механизма MapReduce, например в Qt подобная функция имеет название mappedReduced), указав в ее параметрах: подготовленные разбитые на части данные, функцию map и функцию reduce.

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

Данная технология реализована для различных языков программирования, например, для С++, С#, Java и других.

Удобной, простой в использовании с одной стороны, и показывающие прекрасные результаты быстродействия с другой, является реализация механизма MapReduce в объектно-ориентированной кроссплатформенной библиотеке Qt.

Рассмотрим простой пример. Пусть имеется вектор чисел, имеющий очень большую длину. Необходимо посчитать количество вхождений какого-либо числа в этом векторе.

Однопоточное приложение будет в цикле по-очереди перебирать все значения вектора, сравнивать их с заданным значением и в случае совпадения, увеличивать счетчик вхождений на единицу.

В случае применения MapReduce, программист должен разбить исходный вектор на несколько векторов. Функция map в таком случае будет действовать по алгоритму однопоточной версии, параметром будет являться вектор чисел, возвращаемым значением будет количество вхождений заданного числа. Функция reduce будет проводить операцию сложения результатов после каждого выполнения функции map.

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

В заключении хотелось бы сказать, что применять MapReduce необходимо обоснованно, обдуманно, иначе выигрыш времени, получаемый при распараллеливании, может быть меньше, чем время на создание новых потоков. Но надеюсь, что после освоения этого механизма каждый, кто будет слышать про обработку больших объемов данных, будет думать – да нет же ничего проще =)

Вещь дня: iPhone-джойстик, iPad-"Денди"

Автор: Михаил Карпов

Опубликовано 24 июня 2010 года

Перейти на страницу:

Похожие книги

Самоучитель UML
Самоучитель UML

Самоучитель UMLПервое издание.В книге рассматриваются основы UML – унифицированного языка моделирования для описания, визуализации и документирования объектно-ориентированных систем и бизнес-процессов в ходе разработки программных приложений. Подробно описываются базовые понятия UML, необходимые для построения объектно-ориентированной модели системы с использованием графической нотации. Изложение сопровождается примерами разработки отдельных диаграмм, которые необходимы для представления информационной модели системы. Цель книги – помочь программистам освоить новую методологию разработки корпоративных программных приложений для последующего применения полученных знаний с использованием соответствующих CASE-инструментов.

Александр Васильевич Леоненков , Александр Леоненков

Зарубежная компьютерная, околокомпьютерная литература / Программирование / Прочая компьютерная литература / Книги по IT
Компьютер + TV: телевидение на ПК
Компьютер + TV: телевидение на ПК

Казалось бы, что общего между персональным компьютером и телевизором, помимо экрана? Один предназначен для работы, игр, серфинга по Интернету, второй – для просмотра любимых фильмов, телепередач, спортивных трансляций. Однако не все так просто, как может показаться на первый взгляд. Сегодняшний ПК с легкостью выполняет функции телевизора, ведь он способен принимать телевизионный сигнал (как эфирный, так и спутниковый), вещающие в Интернете теле– и радиостанции. Кроме того, именно при взаимодействии ПК и Интернета родилась относительно новая, но тем не менее уже успевшая зарекомендовать себя схема работы ТВ – интерактивное телевидение.Итак, если вы хотите овладеть современными телевизионными технологиями, а также превратить свой ПК в «комбайн», способный выполнять не только привычные для компьютера функции, но и массу других, то эта книга – для вас.

Виктор Гольцман , Виктор Иосифович Гольцман

Зарубежная компьютерная, околокомпьютерная литература / Прочая компьютерная литература / Книги по IT