Выбор языка сценариев для начальной [закрытой] производительности

Нет необходимости в подзапросе:

UPDATE 
    Customers
SET 
    FirstName = Mid(FullName, 1, InStr(FullName, " ") - 1),
    LastName = Mid(FullName, InStr(FullName, " ") + 1),
    FullName = Null
9
задан Chris Dail 29 November 2008 в 21:34
поделиться

13 ответов

Из-за Вашего требования в течение быстрого времени запуска и частоты вызова, больше, чем 1 Гц, я рекомендовал бы любое пребывание с C и выяснение, как сделать это портативным (не всегда столь же легкий как несколько ifdefs) или исследование возможности превращения его в сервисного демона, который всегда работает. Конечно, это зависит от как

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

Вы могли также посмотреть на кросс-платформенные платформы как gtk, wxWidgets и QT. В то время как они предназначены для графический интерфейсов пользователя, у них действительно есть низкий уровень кросс-платформенными типами данных и сетевыми библиотеками, которые могли сделать задание из использования базирующегося приложения быстрого C легче.

8
ответ дан 4 December 2019 в 06:00
поделиться

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

Можно также сделать это довольно легко в Ruby, и в Perl (хотя еще с некоторой трудностью). Не спрашивайте меня о способах сделать это все же.

0
ответ дан 4 December 2019 в 06:00
поделиться

У Вас может вместо этого быть он быть продолжительным процессом и ответить на http или запросы rpc?
Это удовлетворило бы требования задержки почти в любом сценарии, но я не знаю, повредило ли это Ваши ограничения объема потребляемой памяти.

0
ответ дан 4 December 2019 в 06:00
поделиться

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

Не ясно, предназначается ли это для обработки Запросов HTTP; если так, Perl имеет хороший модуль сервера HTTP, привязку к нескольким различным синтаксическим анализаторам XML на базе С и сверкающую быструю строковую поддержку. (Если Вы не хотите к daemonize, он имеет хороший, полнофункциональный модуль CGI; если Вы имеете полный контроль над сервером, он работает, Вы могли бы также использовать mod_perl для реализации сценария как обработчика Apache.) Строки Ruby немного медленнее, но существуют некоторые действительно хорошие инструменты фоновой обработки, доступные для него. Я не так знаком с Python, я боюсь, таким образом, я не могу действительно предоставить рекомендации об этом.

В целом, тем не менее, я не думаю, что Вы как startup-time-constrained, поскольку Вы думаете, что Вы. Если сценарий действительно назовут несколько раз в секунду, то любой достойный интерпретатор в любой достойной операционной системе будет кэшироваться в памяти, как будет исходный код Вашего сценария и его модулей. Результат: времена запуска не будут так плохи, как Вы могли бы думать.

Dagny:~ brent$ time perl -MCGI -e0

real    0m0.610s
user    0m0.036s
sys     0m0.022s
Dagny:~ brent$ time perl -MCGI -e0

real    0m0.026s
user    0m0.020s
sys     0m0.006s

(Параметры к интерпретатору Perl загружают довольно большой модуль CGI и затем выполняют строку кода '0';.)

2
ответ дан 4 December 2019 в 06:00
поделиться

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

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

0
ответ дан 4 December 2019 в 06:00
поделиться

Если Низкая память и низко запускается, время действительно важны, Вы могли бы хотеть полагать, что выполнение работы сохраняет код C кросс-платформенным, однако я нашел, что это редко необходимо.

Лично я использовал бы Ruby или Python для этого типа задания, они оба делают очень легким сделать четкий понятный код, который другие могут поддержать (или можно поддержать после не рассмотрения его в течение 6 месяцев). Если бы Вы имеете контроль, чтобы сделать так, я также предложил бы получить последнюю версию интерпретатора, поскольку и Ruby и Python сделали известные улучшения вокруг производительности недавно.

Это - что-то вроде персональной вещи. Программирование Ruby делает меня счастливым, C код не делает (ни сценарии удара ни для чего нетривиального).

3
ответ дан 4 December 2019 в 06:00
поделиться

При надлежащей записи C должен быть независимой платформой и только нуждался бы в том, чтобы перекомпилировать для тех различных платформ. Вам, возможно, придется перейти через некоторые #ifdef обручи для заголовков (не, все системы используют те же заголовки), но самый нормальный (non-win32 API), вызовы являются очень портативными. Для веб-доступа (который я предполагаю Вами, нуждаются, поскольку Вы упоминаете bash+curl), Вы могли смотреть на libcurl, это доступно для всех платформ, которые Вы упомянули и не должны быть что трудно работать с.

Со временем выполнения и стоимостью памяти в памяти, я сомневаюсь, что Вы могли пойти немного быстрее, чем правильно записанный C с любым языком сценариев, поскольку Вы потеряете по крайней мере некоторое время при интерпретации сценария...

5
ответ дан 4 December 2019 в 06:00
поделиться

Я соглашаюсь с Lua: это суперпортативно, это имеет библиотеки XML, или собственный компонент или путем привязки библиотек C как Эмигрант, это имеет хорошую библиотеку сокета (LuaSocket) плюс, для сложного материала, некоторой ВИХРЕВОЙ привязки, и известно за то, что было очень легко (часто встраиваемый в низкие запоминающие устройства), очень быстро (один из самых быстрых языков сценариев), и мощно. И очень легкий кодировать!

Это кодируется в чистом Ansi C, и партия людей утверждает, что это имеет один из лучших C выжидание API (звонящий C стандартные программы от Lua, называя код Lua от C...).

4
ответ дан 4 December 2019 в 06:00
поделиться

"названный где угодно с каждой минуты к много раз в секунду. Как следствие хранение, это - память и время запуска низко, важно".

Это не походит на сценарий мне вообще.

Это походит на сервер, обрабатывающий запросы, которые прибывают с каждой минуты до несколько раз секунды.

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

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

6
ответ дан 4 December 2019 в 06:00
поделиться

Lua является языком сценариев, который соответствует Вашим критериям. Это - конечно, самый быстрый и самый низкий доступный язык сценариев памяти.

22
ответ дан 4 December 2019 в 06:00
поделиться

Python хорош. Я также проверил бы Игровой веб-сайт Сравнительных тестов языков программирования:

http://shootout.alioth.debian.org/

Могло бы стоить провести немного времени, понимая сравнительные тесты (включая числа в течение времен запуска и использования памяти). Много языков сравнено, такие как Perl, Python, Lua и Ruby. Можно также сравнить эти языки со сравнительными тестами в C.

2
ответ дан 4 December 2019 в 06:00
поделиться

Портируйте свое приложение на Ruby. Если Ваше приложение является слишком медленным, представьте его и перепишите те части в C.

0
ответ дан 4 December 2019 в 06:00
поделиться

На первый взгляд это, походит по разработке, как показывает опыт, я предлагаю фиксировать только, когда вещи повреждаются.

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

Наконец Вы также упомянули, что это - часть большего решения, затем можно хотеть снова использовать язык, средства больших решений. Из описания Вы дали (xml+http), это кажется вполне обычным приложением, которое может быть записано на каком-либо языке универсала (возможно, веб-контейнер в Java?).

Некоторые библиотеки могут помочь Вам сделать свой код портативным: Повышение, QT

больше деталей может инициировать больше идей :)

0
ответ дан 4 December 2019 в 06:00
поделиться