На той неделе потратил не один час на то, чтобы доказать самому себе, что
Moose можно применять для высоконагруженных приложений, в которых жалко как
процессор, так и память. Процессор, потому что весь IO асинхронный и в io не
тупим, память, потому что много разных процессов на одной машине. Результат:
Mouse (это не опечатка). Бенчмарки по горячим следам публикую. На wallclock
просьба не смотреть. Бенчмарк с виртуальной машины, так что wallclock побит,
но использование процессора реальное. Проверял и на физическом сервере,
результат такой же (но wallclock адекватнее).

Итак, создание объекта с одним аттрибутом типа Int (для classic проверяем
регекспом):
Base class new()
Benchmark: timing 500000 iterations of classic, moose, mouse...
    classic:  4 wallclock secs ( 2.84 usr +  0.00 sys =  2.84 CPU) @
176308.54/s (n=500000)
     moose:  7 wallclock secs ( 7.11 usr +  0.00 sys =  7.11 CPU) @
70329.67/s (n=500000)
     mouse:  1 wallclock secs ( 2.16 usr +  0.00 sys =  2.16 CPU) @
231046.93/s (n=500000)

Создание объекта подкласса с еще одним аттрибутом типа Int:
Subclass new()
Benchmark: timing 200000 iterations of classic, moose, mouse...
    classic:  3 wallclock secs ( 2.98 usr +  0.00 sys =  2.98 CPU) @
67191.60/s (n=200000)
     moose:  4 wallclock secs ( 3.55 usr +  0.00 sys =  3.55 CPU) @
56263.74/s (n=200000)
     mouse:  1 wallclock secs ( 1.11 usr +  0.00 sys =  1.11 CPU) @
180281.69/s (n=200000)

Доступ по акцессору на чтение (для classic акцессора нету, лезем напрямую в
хэш):
Get attribute value
Benchmark: timing 5000000 iterations of classic, moose, mouse...
    classic:  1 wallclock secs ( 1.29 usr +  0.00 sys =  1.29 CPU) @
3878787.88/s (n=5000000)
     moose:  5 wallclock secs ( 5.26 usr +  0.00 sys =  5.26 CPU) @
950965.82/s (n=5000000)
     mouse:  1 wallclock secs ( 1.95 usr +  0.00 sys =  1.95 CPU) @
2570281.12/s (n=5000000)

А тут я пытался понять, круче ли around, чем SUPER::.
Call redefined method
Benchmark: timing 5000000 iterations of classic, moose, mouse...
    classic:  4 wallclock secs ( 3.69 usr +  0.00 sys =  3.69 CPU) @
1355932.20/s (n=5000000)
     moose:  3 wallclock secs ( 3.52 usr +  0.00 sys =  3.52 CPU) @
1422222.22/s (n=5000000)
     mouse:  3 wallclock secs ( 3.58 usr +  0.00 sys =  3.58 CPU) @
1397379.91/s (n=5000000)

Ну, и насчет памяти. Moose кушает ~8Мб, Mouse ~ 1Мб.

16 ноября 2010 г. 15:46 пользователь Mons Anderson <[email protected]> написал:

> On Monday 15 November 2010 22:15:30 Михаил Шогин wrote:
> > Перешли на Class::Accessor::Fast::XS "moose-like"; %)
>
> А можно посмотреть на это? Очень интересно.
> Сам я использую accessors::fast для lightweight приложений
>
> --
> Mons Anderson aka Vladimir Perepelitsa
> <[email protected]> / #99779956 / [email protected]
> --
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org
>
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить