Сравнение решений Python и Perl с вызовом Wide Finder


8

Я был бы очень признателен, если бы вы могли сравнить выигрыш O’Rourke's Perl solution с Lundh's Python solution, так как я не знаю Perl достаточно хорошо, чтобы понять, что там происходит. В частности, я хотел бы знать, что дало преимущество Perl версии 3x: алгоритмическое превосходство, качество C-расширений, другие факторы?

Wide Finder: Results

5

Perl сильно оптимизированы для обработки текста. Есть так много факторов, что трудно сказать, какая именно разница. Текст представлен полностью по-разному внутри (utf-8 по сравнению с utf-16/utf-32), а двигатели с регулярным выражением тоже совершенно разные. Механизм регулярных выражений Python является обычным и не так широко используется, как perl. На нем работает очень мало разработчиков (я думаю, что это в значительной степени не поддерживается), в отличие от Perl, который в основном является «ядром языка».

В конце концов, Perl является язык обработки текста.

+1

Образцы журналов являются ASCII, насколько я знаю, а версия Python использует байтовые строки без преобразования Unicode. Поэтому я считаю, что здесь нет «utf-8 против utf-16». 23 сен. 082008-09-23 22:33:36

+1

Я согласен с константин. Я не вижу, что это делает unicode. 23 сен. 082008-09-23 22:42:23


10

Лучшая реализация регулярного выражения perl - это одна часть истории. Однако это не может объяснить, почему реализация perl лучше масштабируется. Разница становится больше с большим количеством процессоров. По какой-то причине проблема python имеет проблему.


1

Реализация Perl использует системный вызов mmap. То, что этот вызов делает, это установить указатель, который для процесса выглядит как нормальный сегмент памяти или буфер для программы. Он отображает содержимое файла в область памяти. Существуют преимущества выполнения этого против стандартного файла IO (чтение) - один из них заключается в том, что для доступа к данным нет необходимости в библиотеке пользовательского пространства, а в другом случае требуется меньше операций копирования (например, перемещение данных между ядро и пользовательское пространство).

Строки и регулярные выражения Perl основаны на 8 бит (в отличие от utf16 для Java), поэтому собственный «характер символов» Perl является тем же самым кодированием mmapped-файла.

Когда механизм регулярного выражения затем работает с переменным, поддерживаемым mmap, он напрямую обращается к файлам данных через область памяти с маской, не проходя через функции ввода-вывода Perl, или даже функции ввода-вывода libc.

mmap, вероятно, в значительной степени ответственен за разницу в производительности по сравнению с версией Python, используя обычные библиотеки IO Python, которые дополнительно вводят накладные расходы на поиск разрывов строк.

Программа Perl также поддерживает -J для параллелизации обработки, где oepen «- |» вызывает fork(), где дескриптор файла в родительском файле является исходным текстом дочернего элемента. Ребенок обрабатывает сериализацию своих результатов в stdout, а родительский де-сериализует их для координации и суммирования результатов.

+1

Версия Python также использует mmap. Регулятор Python также работает непосредственно на mmap. 25 сен. 082008-09-25 20:47:41


0

Реализация Perl использует системный вызов mmap.

Это. Он избегает копирования буфера и обеспечивает асинхронный ввод-вывод.

+1

Версия Python также основана на mmap. Но можете ли вы уточнить, что «mmap обеспечивает асинхронный ввод-вывод для версии Perl»? 02 дек. 092009-12-02 12:47:01


3

Многоядерный двигатель (MCE) выпущен для Perl. MCE хорошо справляется с этим, даже при чтении непосредственно с диска с 8 рабочими (холодный кэш). Сравните с wf_mmap. MCE следует за моделью очередности банка при чтении входных данных. Посмотрите под папку изображений для слайдов.

Исходный код размещен на http://code.google.com/p/many-core-engine-perl/

Документацию Perl можно прочитать на https://metacpan.org/module/MCE

Реализация широкоугольного Finder с MCE предусмотрена в примерах/tbray/

https://metacpan.org/source/MARIOROY/MCE-1.514/examples/tbray/

Наслаждайтесь MCE.

Script....: baseline1 baseline2 wf_mce1 wf_mce2 wf_mce3 wf_mmap 
Cold cache:  1.674  1.370 1.252 1.182 1.174 3.056 
Warm cache:  1.236  0.923 0.277 0.106 0.098 0.092