Я пишу Perl-код, который вызывает подмодуль десятки миллионов раз. Подмодуль требует значительных вычислительных ресурсов, и его время выполнения очень медленное. Я нахожу программу на C ++, которая точно делает то, что делает подмодуль, и я хотел бы заменить подмодуль на программу C ++.
Мне интересно, должен ли я написать код XS для интерфейса программы. Значительно ли снижает производительность прямой вызов программы на C ++ с помощью команды «system» в коде perl?
Спасибо!
Запуск внешней программы всегда будет медленнее, чем вызов функции. Если вы заботитесь о скорости, о запуске программы «десятки миллионов раз» не может быть и речи.
Если цикл, который выполняется десятки миллионов раз, находится внутри внешней программы, то запуск его только один раз может быть приемлемым. Однако теперь у вас есть другая проблема: как получить десятки миллионов данных во внешнюю программу и как вернуть результаты. Поскольку это внешняя программа, вам придется передавать данные в текстовом виде. Это означает, что ваш скрипт должен преобразовывать данные в текст, передавать их во внешнюю программу; внешняя программа должна проанализировать его и преобразовать в его исходное представление, выполнить вычисления, преобразовать результаты в текст и вернуть его; тогда ваш скрипт должен разобрать результат.
system
в любом случае, вероятно, это не правильный инструмент для этого. Лучше всего подходит для запуска программ по их эффекту (например, rm -rf /
) а не их вывод. Если вы хотите прочитать вывод программы, вы, вероятно, хотите обратные ссылки (``
а.к.а. qx{}
) или трубку для себя (см. «Использование open()
для МПК «в perldoc perlipc
).