[Moscow.pm] Быстрая конкатенация строк

Andrey Kovbovich akovbovich на gmail.com
Вт Мар 10 10:27:36 PDT 2015


Задача - приходят от I/O куски данных, и нужно их буферизировать перед
обработкой. Вопрос как это сделать эффективно (идеально - без копирования).

10 марта 2015 г., 20:20 пользователь Dmitry Smal <mialinx на gmail.com>
написал:

>  А что у вас за задача такая ?
> Есть ооочень много конкатенаций подряд идет  (в цикле например) - то нужно
> оптимизировать сам алгоритм склейки.
> Если не нагружен - оставить более читаемый вариант =)
>
>
> On 03/10/2015 07:59 PM, Andrey Kovbovich wrote:
>
> Интересно, получается конкатенировать более чем в 2 раза быстрее
> последовательно (selfcat), а не разом ($z = $x . $y);
>
>  Warstone, я писал про использование сабстр с параметром replace (4ый). А
> ты почему-то используешь в примерах 3х-арный вариант.
>
> 2015-03-10 19:48 GMT+03:00 PEF Secure <pef-secure на yandex.ru>:
>
>>  On Tuesday, March 10, 2015 17:03:36 Andrey Kovbovich wrote:
>> > Кто-нибудь знает, за счет чего substr быстрее?
>> >
>> > $ perl -MBenchmark=cmpthese
>> >
>> -wE'my$x="0"x1_000_000;my$b="1"x100_000;cmpthese(10000,{concat=>sub{my$z=$x.
>> >
>> $b;},substr=>sub{my$z="";substr$z,(length$z),(length$x),$x;substr$z,(length$
>> > z),(length$b),$b;},join=>sub{my$z=join("",$x,$b)}});' Rate   join concat
>> > substr
>> > join   3922/s     --    -0%   -58%
>> > concat 3937/s     0%     --   -57%
>> > substr 9259/s   136%   135%     --
>>
>>  selfcat => sub {my$z=$x; $z.=$b;}
>>
>> вот примерный аналог твоего substr
>>
>> --
>> PEF Developer
>>  --
>> Moscow.pm mailing list
>> moscow-pm на pm.org | http://moscow.pm.org
>>
>
>
>
>
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20150310/d2ad5c86/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm