Сделайте ваш код быстрее с помощью секретного турбо-модуля Perl

  1. Требования
  2. Понимание MCE
  3. Начиная
  4. Работа с путями к файлам
  5. Изменение количества работников
  6. Изменение размера чанка
  7. Заключение
  8. Спасибо

Большинство современных процессоров являются многоядерными, однако программы на Perl обычно работают однопоточными только на одном ядре за раз. Введите Много Ядро Двигатель Модуль - он позволяет легко запускать существующий код Perl параллельно каждому ядру на вашей платформе и значительно повысить скорость работы.

Требования

Вам нужно будет установить модуль MCE. Электрический ток Результаты тестеров CPAN показать, что он работает на широком спектре платформ и версий Perl. Вы можете установить MCE через CPAN в командной строке:

Вам не нужно компилировать Perl с включенными потоками, чтобы получить преимущества параллельной обработки, поскольку MCE может реализовать параллельную обработку с использованием дочерних процессов через fork, вилы :: разделяемые , или же темы :: разделяемые , По умолчанию MCE проверяет наличие модуля потоков, в противном случае дочерние процессы создаются с помощью fork.

Понимание MCE

MCE-х документация описывает его реализацию как «модель банковской очереди». По сути, MCE использует до одного работника на ядро ​​на платформе хоста и распределяет работу между ними «порциями». Чанк - это просто набор элементов, таких как фрагмент массива или несколько строк файла. Рабочие будут обрабатывать каждый кусок параллельно. Фактическая «работа», выполняемая работником, обычно является выполнением подпрограммы Perl. Это станет яснее в примере ниже.

Управление распределением и назначением чанков создает небольшие накладные расходы: поэтому MCE наиболее эффективен, когда требуется обработать большое количество элементов, а «работа», выполняемая для каждого элемента, представляет собой нечто большее, чем простое сопоставление с образцом. При тестировании этой статьи я занимался анализом логов веб-сервера и обнаружил, что сокращение времени выполнения на 50% является обычным явлением.

Начиная

Самый простой способ начать работу с MCE - это использовать одну из 3 базовых моделей автоматизации, которые поставляются с MCE. Базовые модели представляют собой замену элементов управления Perl, foreach, map и grep. Модели автоматически настраиваются - по умолчанию они используют максимальное количество ядер, доступных на хост-платформе, и выбирают оптимальный размер чанка на основе количества входных записей и типа источника.

Давайте посмотрим на модель grep. Код ниже является стандартным кодом Perl; он открывает файл nginx access.log и печатает количество записей в журнале, которые были получены от пользователя-робота:

использовать строгое; использовать предупреждения; используйте функцию «сказать»; использовать Nginx :: Log :: Entry; sub detect_robot {return Nginx :: Log :: Entry -> new ($ _ [0]) -> was_robot; } open (мой $ LOG, '<', '/var/logs/access.log'); мой $ count = grep {detect_robot ($ _)} <$ LOG>; скажем скаляр $ count;

Давайте изменим код выше, чтобы использовать модель MCE :: Grep. Новый код ниже:

использовать строгое; использовать предупреждения; используйте функцию «сказать»; использовать Nginx :: Log :: Entry; используйте MCE :: Grep; sub detect_robot {return Nginx :: Log :: Entry -> new ($ _ [0]) -> was_robot; } open (мой $ LOG, '<', '/var/logs/access.log'); мой $ count = mce_grep {detect_robot ($ _)} $ LOG; скажем скаляр $ count;

Основные изменения здесь:

  • Строка «use MCE :: Grep», которая импортирует модуль
  • Изменение grep на «mce_grep»
  • Удаление оператора diamond из дескриптора файла ($ LOG)

Другое отличие состоит в том, что этот код будет работать намного быстрее, чем в первом примере. Насколько быстрее зависит от платформы и количества входных записей. В ходе моего тестирования на четырехъядерном процессоре я обнаружил, что MCE :: Grep был стабильно на 100-150% быстрее, но с большим количеством ядер я ожидал, что это будет расти дальше.

Другие основные модели автоматизации MCE :: Loop а также MCE :: Карта работа во многом такая же была как у MCE :: Grep.

Работа с путями к файлам

MCE также предоставляет специальную функцию «mce_grep_f» для работы непосредственно с файлами (функция предусмотрена для всех моделей MCE, например, mce_loop_f и mce_map_f). Функция «mce_grep_f» требует аргумента filepath:

использовать строгое; использовать предупреждения; используйте функцию «сказать»; использовать Nginx :: Log :: Entry; используйте MCE :: Grep; sub detect_robot {return Nginx :: Log :: Entry -> new ($ _ [0]) -> was_robot; } my $ count = mce_grep_f {detect_robot ($ _)} '/var/logs/access.log'; скажем скаляр $ count;

Эта функция не работает в версии 1.504 MCE, но ее легко исправить - просто вставьте одну строку. Автор модуля Марио Рой связался со мной и любезно предоставил разница , Мне сказали, что эта функция будет исправлена ​​в следующей версии MCE. ( РЕДАКТИРОВАТЬ: теперь исправлено на 1.509 ).

При тестировании функции mce_grep_f с использованием приведенного выше кода в файле журнала размером 55 МБ я не заметил заметной разницы в производительности по сравнению с mce_grep, однако есть сообщения об увеличении скорости до 4 раз, поэтому обязательно рассмотрим это подробнее.

Изменение количества работников

По умолчанию MCE инициализирует одного работника на ядро. Он определяет количество ядер, используя следующие методы:

  • Linux: читает / proc / stat
  • OSX / BSD: выполняет «sysctl -n hw.ncpu 2> / dev / null»
  • Windows: использует переменную среды: ENV {NUMBER_OF_PROCESSORS}

MCE также имеет платформо-зависимые методы, определенные для Solaris, HP-UX и других систем. Предполагая, что MCE будет правильно угадывать число процессоров, единственной причиной изменения поведения по умолчанию будет использование менее 100% доступных ядер. Вы можете сделать это, используя метод init ():

используйте MCE :: Grep; MCE :: Grep :: init ({max_workers => 3});

Приведенный выше код использует MCE :: Grep, но одна и та же команда init () предоставляется для всех моделей MCE.

Изменение размера чанка

Когда тип источника является массивом, MCE автоматически вычисляет размер чанка на основе количества входных записей и доступных рабочих. Вы можете переопределить это, однако в моем тестировании я обнаружил, что автоматически рассчитанный размер чанка был почти всегда оптимальным. Вот типичный набор результатов для обработки файла журнала 55 МБ:

Если тип источника - файловый дескриптор, то размер порции по умолчанию равен 2 (автор модуля Марио Рой сказал мне, что это изменится в следующей версии, 1.506). Поэтому вы можете изменить размер куска, чтобы повысить производительность. Вы можете сделать это, используя метод init ():

используйте MCE :: Grep; MCE :: Grep :: init ({chunk_size => 500});

Поскольку управление назначением рабочих чанков между рабочими несет небольшую нагрузку, оптимальный размер чанка будет таким, чтобы минимизировать количество назначений чанков, сохраняя при этом одинаковую занятость работников. Одним из факторов, который MCE не принимает во внимание, является сложность «работы», которая обрабатывается: то есть, сколько времени требуется одному работнику для выполнения одной единицы работы. Было бы здорово разработать какую-то динамику логика определения размера куска на основе производительности во время выполнения.

Заключение

Автор MCE, Марио Рой проделал замечательную работу, предоставив простой API и фантастический документация , Очень легко начать работу с базовой моделью автоматизации, такой как MCE :: Grep, и получить мгновенные улучшения скорости. Однако в MCE есть гораздо больше, таких как процедуры инициализации и завершения работы, обратные вызовы и последовательность. Не забудьте проверить это.

Спасибо

Спасибо Джеффу Тэлхаммеру ( Stratopan ) для защиты этого модуля.

Знаете ли вы модуль, который вы хотели бы, чтобы мы покрыли? Если это так, мы хотели бы услышать от вас! Пишите нам по адресу: [email protected].


Эта статья была первоначально размещена на PerlTricks.com ,

Похожие

Добавить Drupal 8 войти с помощью кнопки Google
... ства социальных сетей) очень важно, потому что люди ленивы. Они не хотят заполнять формы, чтобы подписаться на веб-сервис. Войти / зарегистрироваться одним щелчком мыши является идеальным решением. Войти через фейсбук довольно просто. Все, что вам нужно сделать, это установить модуль и создать проект Google и включить API и службы для получения учетных данных (секрет клиента и идентификатор). social_api ,
PHP авторизация с помощью JWT (JSON Web Tokens)
Если вам нравятся темы по компьютерной безопасности, вы будете знать, что одной из самых обсуждаемых и противоречивых тем является аутентификация пользователя. В его контексте вы найдете широкий спектр областей исследования, от новых механизмов до юзабилити. Таким образом, к моему удивлению, JSON Web Tokens - тема не часто говорили о и я думаю, что это заслуживает того, чтобы быть в центре внимания сегодня. Мы увидим,
Как удалить гиперссылки с рабочего листа с помощью Visual Basic
... ктивный метод удаления гиперссылок с вашего рабочего листа? Используя Visual Basic для Excel, следующий код удалит все гиперссылки с листа. Visual Basic Кодирование : Sub RemoveHyperlinks () Activesheet.Hyperlinks.Delete End Sub Иногда при копировании и вставке материалов из Интернета также могут появляться встроенные гиперссылки. Следуйте приведенному ниже примеру, чтобы объяснить, как можно быстро удалить гиперссылки с листа.
Новая Шотландия откроет ключевой поток экспресс-въезда с пересмотренными целями
27 апреля 2018 года. Иммиграционное управление Новой Шотландии объявило о том, что откроет самую популярную категорию своего потока Канадского экспресс-въезда в 9:00 по восточному поясному времени в субботу, 28 апреля 2017 года. Категория B из Новая Шотландия Спрос: Экспресс
Обзор: PowerPoint для iPad
Microsoft наконец-то выпустила PowerPoint для iPad! С появлением iPad в 2010 году у Microsoft было почти 4 года, чтобы подготовить свою вездесущую платформу для презентаций для iOS. Так что я думаю? Вот мои первые впечатления. Начиная Итак, обо всем по порядку, давайте установим приложение PowerPoint на мой iPad. Удивительно, но первой проблемой, которую я обнаружил, была попытка найти приложение в магазине приложений. При поиске «PowerPoint на iPad» меня поразили
Как редактировать карты Minecraft с помощью внешнего редактора
... стический редактор в игре, который позволяет вам вносить дополнительные изменения в ландшафт Minecraft во время игры"> В предыдущем уроке мы взяли WorldEdit для вращения фантастический редактор в игре, который позволяет вам вносить дополнительные изменения в ландшафт Minecraft во время игры. Сегодня мы смотрим на MCEdit - мощный внешний редактор, используемый для редактирования мира Minecraft вне игры, так же, как вы редактируете фотографию
Изменение стилей фокуса по умолчанию
Есть вопросы? Обсудите этот учебник HTML5 с другими на форумах. Знаете ли вы, что ваш браузер автоматически добавит некоторые стили CSS к элементам, даже не указав их? Это так! Наиболее распространенный случай - когда элементы имеют фокус, и в этом уроке мы рассмотрим, как вы можете указать свои собственные стили в этих случаях. Давайте посмотрим на некоторые примеры
Понимание файлов cookie для WordPress Auth
... кованная уязвимость побудил меня еще раз взглянуть на функцию WordPress wp_validate_auth_cookie, которая отвечает за проверку подлинности пользовательских запросов и в конечном итоге контролирует доступ к вашей установке WordPress. Этот пост не об этой конкретной уязвимости ( больше информации здесь ) а скорее о том, как WordPress генерирует и проверяет файлы cookie аутентификации для авторизации
Вакансия от 3 июня 2019 25000 грн. 10000 +% + бонусы + премии = 25000 грн. компания: СмартШоп ...
Вакансия от 3 июня 2019 25000 грн. 10000 +% + бонусы + премии = 25000 грн. компания: СмартШоп Розничная торговля; 50-250
Adobe Photoshop на iPad Pro - Alisczech от Яна Брезина
В десятый раз я с удивлением узнал, что классический Photoshop не работает на iPad Pro. Я не знаю, где это, но многие люди живут в этом заблуждении. Так как же с Photoshop на iPad? iPad не компьютер! Прежде всего, важно отметить, что iPad имеет операционную систему iOS, которая имеет мало общего с MacOS или Windows. В противном случае он управляется, имеет другую структуру, а приложения для iPad отличаются от приложений для компьютера. Приложения, которые вы знаете с вашего
680 NEWS - Все новости радио Торонто
... сти

Комментарии

Вы также делаете все как ваш партнер?
Вы также делаете все как ваш партнер? Вы постоянно ухаживаете за ним? Будьте осторожны, потому что, предполагая, что ваш выбор рассеян или забывчив, вы все равно напоминаете ему о том, что он должен помнить. Вы также хотите наказать его, как маленького ребенка, и предположить, что ваш партнер не будет ничего делать серьезно. Но будьте осторожны: «Игра роли матери по отношению к мужчине поначалу может привести к, казалось бы, хорошим эффектам, но реальность будет иметь разрушительные
Знаете ли вы, что ваш браузер автоматически добавит некоторые стили CSS к элементам, даже не указав их?
Знаете ли вы, что ваш браузер автоматически добавит некоторые стили CSS к элементам, даже не указав их? Это так! Наиболее распространенный случай - когда элементы имеют фокус, и в этом уроке мы рассмотрим, как вы можете указать свои собственные стили в этих случаях. Давайте посмотрим на некоторые примеры Давайте сначала представим проблему. Разные браузеры делают разные вещи, когда элементы получают фокус. Прежде чем мы обеспечим согласованность, давайте посмотрим,
Итак, что вы делаете, чтобы ваш ребенок не открывал такие страницы на Android?
Итак, что вы делаете, чтобы ваш ребенок не открывал такие страницы на Android? Вы должны действовать прямо на телефоне или планшете и вносить соответствующие изменения там. Способ № 1 - установить приложение родительского контроля (простой метод) Одним из самых популярных способов является установка специального приложения для родительского контроля. Таких приложений очень много, и они должным образом защищены от удаления - вам необходимо ввести пароль, который мы стремимся
Как вы знаете, что ваш веб-хост является основной причиной проблемы вашего сайта?
Как вы знаете, что ваш веб-хост является основной причиной проблемы вашего сайта? Вот несколько подсказок: Ваш сайт постоянно снижается Ваш сайт очень медленный Обслуживание клиентов не является полезным Вы больше пространства, функциональности или других ресурсов Вы платите слишком много Вас не раз сломали Вы слышали о замечательную услугу в других местах Bottomline: хороший веб-хост = лучше спать по
Высшие оценки в тестах по обучению с помощью карт разума?
Высшие оценки в тестах по обучению с помощью карт разума? Напоминание: этот текст взят непосредственно из

Знаете ли вы модуль, который вы хотели бы, чтобы мы покрыли?
Ктивный метод удаления гиперссылок с вашего рабочего листа?
Так что я думаю?
Знаете ли вы, что ваш браузер автоматически добавит некоторые стили CSS к элементам, даже не указав их?
Так как же с Photoshop на iPad?
Вы также делаете все как ваш партнер?
Вы постоянно ухаживаете за ним?
Знаете ли вы, что ваш браузер автоматически добавит некоторые стили CSS к элементам, даже не указав их?
Итак, что вы делаете, чтобы ваш ребенок не открывал такие страницы на Android?
Как вы знаете, что ваш веб-хост является основной причиной проблемы вашего сайта?