[Moscow.pm] Кто-нибудь это видел?
Orlovsky Alexander
nordicdyno на yandex.ru
Пт Ноя 16 14:46:54 PST 2007
> > Но по-моему такое поведение мапов и грепов --вполне предсказуемое, если вспомнить как они устроены в перле. Который, в свою очередь, совсем не функциональный язык программирования. ;)
> Ну да, у них предназначение в потоки строится, причём поток на самом
> деле не оптимизирован и выполняется не паралельно.
> изза этого волшебные копирования памяти, а в питоне тупле - это struct[]
> поэтому очень быстрый, я сам когда увидел - офигел.
Я не очень вижу связь между туплами питона и неэффективной работай мапа и грепа в перле :)
Питон я немножко смотрел но так и не придумал куда мне его запихать для своих задач, когда есть перл. Разве что Джанго понравился, может руки дойдут поюзать как-нибудь :)
А в случае с мапом и грепом мы получаем неявное копирование всего массива, т.к. по сути справа от передачи ссылки на функцию обработки, мы передаем список параметров. С фором и форичем это не так, там по-сути итератор по массиву без копирования чего либо куда либо, .
> > Кстати о языках. Темы на четверг уже расписаны, но на будущее хотелось бы послушать про другие языки программирования, которые применяет уважаемая публика.
> > Или можно здесь обсудить. Может завтра напишу сюда письмо с новой темой, если я еще своим спамом никого не утомил :)
> Рано ещё, про перл не наболтались, хотя обзорная лекция слабые стороны
> перла по сравнению с другими языками, это будет очень круто, но есть
> одна проблема, собрать эти сведения воедино - адский труд, я например
> пока не готов к такому.
Не надо ацкого туда, хотелось бы простого и непринужденного общения, типа я юзаю то-то и это круто потому что... =)
Я вот сейчас интересуюсь языками R, Lua и erlang-ом с Haskell-ем =)
Но интересоваться и использовать в работе для реальных задач -- это две большие разницы.
Так что если есть люди знакомые с этими языками и они готовы поделиться своими мыслями и наработками -- это было б здорово! Т.к. у меня до всего руки без достаточного стимула вряд ли дойдут или дойдут нескоро. А вот если мне расскажут как все круто, и как много я теряю не юзая то-то и то-то -- то это совсем другое дело :)))
> Бенч вот:
> #!/usr/bin/perl
> # -*- Mode:cperl; Encoding:utf-8 -*-
> Rate grep map for foreach
> grep 294/s -- -28% -67% -71%
> map 408/s 39% -- -55% -60%
> for 898/s 206% 120% -- -11%
> foreach 1012/s 244% 148% 13% --
> Compilation finished at Sat Nov 17 00:17:17
Если переписать блок кода с форичем то мы получим те же цифры что и с фор, т.к. в перле это одно и тоже (фор и форич) почти-что и разницы быть не должно.
Почему мап и греп отрабатывают быстрее не очень понятно (видимо особенность работы cmpthese), у меня другая картина:
for
timethis 10000: 104 wallclock secs (74.05 usr + 0.11 sys = 74.16 CPU) @ 134.84/s (n=10000)
Foreach
timethis 10000: 105 wallclock secs (74.66 usr + 0.12 sys = 74.78 CPU) @ 133.73/s (n=10000)
Grep
timethis 10000: 218 wallclock secs (154.03 usr + 0.31 sys = 154.34 CPU) @ 64.79/s (n=10000)
Map
timethis 10000: 247 wallclock secs (175.13 usr + 0.32 sys = 175.45 CPU) @ 57.00/s (n=10000)
больше похоже на правду ;)
В этом тесте конечно не видно сколько памяти отжирается, но в случае с мапом и грепом в 2 раза больше должно чем с форами. (можешь проверить)
код бенчилки:
timethis($N, sub { for (@d) {$_++}; } );
print "Foreach\n";
timethis($N, sub { foreach (@c) { $_++}; } );
print "Grep\n";
timethis($N, sub { grep {$_++; 1} @b } );
print "Map\n";
timethis($N, sub { map {$_++} @a; } );
(массивы те же)
Подробная информация о списке рассылки Moscow-pm