На той неделе потратил не один час на то, чтобы доказать самому себе, что Moose можно применять для высоконагруженных приложений, в которых жалко как процессор, так и память. Процессор, потому что весь IO асинхронный и в io не тупим, память, потому что много разных процессов на одной машине. Результат: Mouse (это не опечатка). Бенчмарки по горячим следам публикую. На wallclock просьба не смотреть. Бенчмарк с виртуальной машины, так что wallclock побит, но использование процессора реальное. Проверял и на физическом сервере, результат такой же (но wallclock адекватнее).<br>
<br>Итак, создание объекта с одним аттрибутом типа Int (для classic проверяем регекспом):<br>Base class new()<br>Benchmark: timing 500000 iterations of classic, moose, mouse...<br>    classic:  4 wallclock secs ( 2.84 usr +  0.00 sys =  2.84 CPU) @ 176308.54/s (n=500000)<br>
     moose:  7 wallclock secs ( 7.11 usr +  0.00 sys =  7.11 CPU) @ 70329.67/s (n=500000)<br>     mouse:  1 wallclock secs ( 2.16 usr +  0.00 sys =  2.16 CPU) @ 231046.93/s (n=500000)<br><br>Создание объекта подкласса с еще одним аттрибутом типа Int:<br>
Subclass new()<br>Benchmark: timing 200000 iterations of classic, moose, mouse...<br>    classic:  3 wallclock secs ( 2.98 usr +  0.00 sys =  2.98 CPU) @ 67191.60/s (n=200000)<br>     moose:  4 wallclock secs ( 3.55 usr +  0.00 sys =  3.55 CPU) @ 56263.74/s (n=200000)<br>
     mouse:  1 wallclock secs ( 1.11 usr +  0.00 sys =  1.11 CPU) @ 180281.69/s (n=200000)<br><br>Доступ по акцессору на чтение (для classic акцессора нету, лезем напрямую в хэш):<br>Get attribute value<br>Benchmark: timing 5000000 iterations of classic, moose, mouse...<br>
    classic:  1 wallclock secs ( 1.29 usr +  0.00 sys =  1.29 CPU) @ 3878787.88/s (n=5000000)<br>     moose:  5 wallclock secs ( 5.26 usr +  0.00 sys =  5.26 CPU) @ 950965.82/s (n=5000000)<br>     mouse:  1 wallclock secs ( 1.95 usr +  0.00 sys =  1.95 CPU) @ 2570281.12/s (n=5000000)<br>
<br>А тут я пытался понять, круче ли around, чем SUPER::.<br>Call redefined method<br>Benchmark: timing 5000000 iterations of classic, moose, mouse...<br>    classic:  4 wallclock secs ( 3.69 usr +  0.00 sys =  3.69 CPU) @ 1355932.20/s (n=5000000)<br>
     moose:  3 wallclock secs ( 3.52 usr +  0.00 sys =  3.52 CPU) @ 1422222.22/s (n=5000000)<br>     mouse:  3 wallclock secs ( 3.58 usr +  0.00 sys =  3.58 CPU) @ 1397379.91/s (n=5000000) <br><br>Ну, и насчет памяти. Moose кушает ~8Мб, Mouse ~ 1Мб.<br>
<br><div class="gmail_quote">16 ноября 2010 г. 15:46 пользователь Mons Anderson <span dir="ltr">&lt;<a href="mailto:mons@cpan.org">mons@cpan.org</a>&gt;</span> написал:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div class="im">On Monday 15 November 2010 22:15:30 Михаил Шогин wrote:<br>
&gt; Перешли на Class::Accessor::Fast::XS &quot;moose-like&quot;; %)<br>
<br>
</div>А можно посмотреть на это? Очень интересно.<br>
Сам я использую accessors::fast для lightweight приложений<br>
<div><div></div><div class="h5"><br>
--<br>
Mons Anderson aka Vladimir Perepelitsa<br>
&lt;<a href="mailto:mons@cpan.org">mons@cpan.org</a>&gt; / #99779956 / <a href="mailto:quanth@irc.freenode.net">quanth@irc.freenode.net</a><br>
--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
</div></div></blockquote></div><br>