<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p>@ips даже этим относительно медленным способом <br>
    </p>
    <p><br>
    </p>
    <p>   while (my $ip = $sql->fetchrow_array)<br>
          {<br>
              push @ips,$ip;<br>
          }<br>
      <br>
    </p>
    дает максимум десятки ms  задержок  и потом уже код который я
    отсылал .  <br>
    <br>
    <div class="moz-cite-prefix">On 11/25/2016 04:16 PM, Толян II via
      Moscow-pm wrote:<br>
    </div>
    <blockquote
cite="mid:CAJMZ6sDJqW18N7H_vPN03aQaMNXn-KgaLCX35jWnhhMUfgRA_w@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div>
          <div>У тебя сам цикл тормозит, а не grep<br>
==================================================================================<br>
                use Time::HiRes qw(time);<br>
                use NetAddr::IP;<br>
            <br>
            my @ips = (<br>
                    map("172.16.1.".$_, 1..254 ),<br>
                    map("172.16.2.".$_, 1..254 ),<br>
                    map("172.16.3.".$_, 1..254 ),<br>
                    map("172.16.4.".$_, 1..254 ),<br>
            );<br>
            <br>
                for my $i ( 0 .. 4 ) {<br>
                    my $iponly = 995 + $i;<br>
                    my $s      = time();<br>
                    my %ips    = map { $_ => 1 } @ips;<br>
                    my $r1     = ( not exists $ips{$iponly} );<br>
                    my $time1  = time - $s;<br>
            <br>
                    $s = time();<br>
                    my $r2 = grep $_ eq $iponly, @ips;<br>
                    my $time2 = time - $s;<br>
            <br>
                    $s = time();<br>
                    my $ipn = NetAddr::IP->new("<a
              moz-do-not-send="true" href="http://172.16.1.1/16">172.16.1.1/16</a>");<br>
                    while($ipn < $ipn->broadcast){<br>
                        my $iponly = (split "/", $ipn++)[0];<br>
                    }<br>
            <br>
                    my $time3 = time - $s;<br>
            <br>
                    printf( "i=$i\tmap=%4.3fms grep=%4.3fms
            while=%4.3fms\n", $time1 * 1000, $time2 * 1000, $time3 *
            1000 );<br>
                }<br>
=================================================================================<br>
            <br>
            <br>
            i=0     map=0.572ms grep=0.136ms while=1726.824ms<br>
            i=1     map=0.407ms grep=0.052ms while=1752.693ms<br>
            i=2     map=0.394ms grep=0.048ms while=1701.981ms<br>
            i=3     map=0.507ms grep=0.063ms while=1786.335ms<br>
            i=4     map=0.823ms grep=0.053ms while=1704.208ms<br>
            <br>
==================================================================================<br>
            <br>
            <br>
          </div>
          А если в @ ips еще overloaded ip, то и 10 секунд легко может
          быть <br>
          <br>
        </div>
        В твоем куске не видно как они получаются.<br>
        <br>
        <br>
      </div>
      <div class="gmail_extra"><br>
        <div class="gmail_quote">25 ноября 2016 г., 15:10 пользователь
          Naim Sh via Moscow-pm <span dir="ltr"><<a
              moz-do-not-send="true" href="mailto:moscow-pm@pm.org"
              target="_blank"><a class="moz-txt-link-abbreviated" href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a></a>></span> написал:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div bgcolor="#FFFFFF" text="#000000">
              <p>Оки, я просто думаю щас затестить не весь модуль
                NetAddr::IP а его lite версию ( хотя как я предполагаю
                выигрыш будет маленький)  + щас переустановил точнее
                пересобрал его xs стало лучше . <br>
              </p>
              + надо затестить как она будет с broadcast и subnet-zero
              сетками пахать . <br>
              <div>
                <div class="h5"> <br>
                  <div class="m_-599783468089407545moz-cite-prefix">On
                    11/25/2016 04:07 PM, zhecka via Moscow-pm wrote:<br>
                  </div>
                  <blockquote type="cite">
                    <div class="m_-599783468089407545moz-cite-prefix">ну
                      я бы не сказал.<br>
                      <br>
                      $banned = new Net::Patricia;<br>
                      if(!$banned->match_string($<wbr>banip))<br>
                          {<br>
                               $banned->add_string($banip);<br>
                          }<br>
                      <br>
                      просто заполняешь базу Patricia когда тебе нужно и
                      матчишь что есть и чего нет.<br>
                      <br>
                      <br>
                      <br>
                      On 25.11.2016 14:54, Naim Sh via Moscow-pm wrote:<br>
                    </div>
                    <blockquote type="cite">
                      <p>да кроме 2 и 3  его нету . <br>
                      </p>
                      Кстати как я понял Net::Patricia не очень мне
                      подходит(удобен) ведь мне надо найти адрес
                      которого нет в массиве<br>
                      <br>
                      This module uses a Patricia Trie data structure to
                      quickly perform IP address prefix matching for
                      applications such as IP subnet, network or routing
                      table lookups ?<br>
                      <br>
                      <div class="m_-599783468089407545moz-cite-prefix">On
                        11/25/2016 03:50 PM, Толян II via Moscow-pm
                        wrote:<br>
                      </div>
                      <blockquote type="cite">
                        <div dir="ltr">
                          <div>
                            <div>У тебя может быть overload в нескольких
                              местах:<br>
                            </div>
                            1) В массиве @ips<br>
                          </div>
                          2)  while( $ipn < $ipn->broadcast
                          )              --- вызов метода + overload<br>
                          3) my $iponly = (split '/', $ipn++)[0]; #get<span
                            class="m_-599783468089407545gmail-im">    
                            --- overload в чистом виде + преобразование
                            в строку.<br>
                            <br>
                            <br>
                          </span>
                          <div>
                            <div>
                              <div>
                                <div>
                                  <div><br>
                                  </div>
                                </div>
                              </div>
                            </div>
                          </div>
                        </div>
                        <div class="gmail_extra"><br>
                          <div class="gmail_quote">25 ноября 2016 г.,
                            14:38 пользователь Naim Sh via Moscow-pm <span
                              dir="ltr"><<a moz-do-not-send="true"
                                class="m_-599783468089407545moz-txt-link-abbreviated"
                                href="mailto:moscow-pm@pm.org"
                                target="_blank">moscow-pm@pm.org</a>></span>
                            написал:<br>
                            <blockquote class="gmail_quote"
                              style="margin:0 0 0 .8ex;border-left:1px
                              #ccc solid;padding-left:1ex">Оки и какой
                              вариант быстрее того же map будет .<br>
                              код имеет такой вид ( точнее его кусок
                              который больше всего времени и ест )<br>
                              <br>
                              массив @ips имеет стандартные ipv4 адреса
                              типа 10.56.6.2, 10.135.8.23  ,
                              10.135.22.43 и тд и тп .<br>
                              <br>
                                      my $ipn =
                              NetAddr::IP->new("$first_ip/$n<wbr>etmask");<br>
                              <br>
                                      while( $ipn <
                              $ipn->broadcast )<br>
                                      {<br>
                                          my $iponly = (split '/',
                              $ipn++)[0]; #get<span><br>
                                <br>
                                            if ( ! ( grep {$iponly eq
                                $_}  @ips )  )<br>
                              </span>             {<br>
                                              return $iponly;<br>
                                          }<br>
                              <br>
                                      }<br>
                              <br>
                              first отдает не то что мне нужно из под
                              этой сети адрес в данном случае 10.135.x.y
                              а 10.56.x.y хотя да он первый пустой, но
                              grep выдает то что нужно.<br>
                              <br>
                              Вроде tie переменных и т.д нету
                              <div class="m_-599783468089407545HOEnZb">
                                <div class="m_-599783468089407545h5"><br>
                                  <br>
                                  <br>
                                  On 11/25/2016 03:29 PM, Sergey
                                  Aleynikov via Moscow-pm wrote:<br>
                                  <blockquote class="gmail_quote"
                                    style="margin:0 0 0
                                    .8ex;border-left:1px #ccc
                                    solid;padding-left:1ex"> Добрый
                                    день,<br>
                                    <br>
                                    map будет быстрее только если
                                    поисков по одному и тому же
                                    исходному<br>
                                    массиву @ips будет несколько - т.к.
                                    операция построения хэша дорогая.<br>
                                    Одноразовый поиск - греп быстрее.
                                    first возвращает другое (по смыслу)<br>
                                    значение, чем греп (элемент, а не
                                    количество), но логически для этой<br>
                                    задачи разницы быть не должно.<br>
                                    <br>
                                    PS: my %ips; @ips{@ips} = ();
                                    быстрее, чем my %ips = map { $_
                                    => 1 } @ips;<br>
                                    <br>
                                    Best regards,<br>
                                    Sergey Aleynikov<br>
                                    <br>
                                    <br>
                                    25 ноября 2016 г., 14:00
                                    пользователь Naim Sh via Moscow-pm<br>
                                    <<a moz-do-not-send="true"
                                      href="mailto:moscow-pm@pm.org"
                                      target="_blank">moscow-pm@pm.org</a>>
                                    написал:<br>
                                    <blockquote class="gmail_quote"
                                      style="margin:0 0 0
                                      .8ex;border-left:1px #ccc
                                      solid;padding-left:1ex"> Коллеги,
                                      столкнулся с тем что код такого
                                      вида , используемый для поиска<br>
                                      свободных ip v4 адресов на
                                      размерах 500-1000 элементов
                                      отрабатывается под 5<br>
                                      секунд версия с map :<br>
                                      <br>
                                      my %ips = map { $_ => 1 } @ips;<br>
                                      if (not exists($ips{$iponly} ))<br>
                                      {<br>
                                               return $iponly;<br>
                                      }<br>
                                      <br>
                                      <br>
                                        и с grep(sic!) ~2 секунду :<br>
                                      <br>
                                      if ( ! ( grep {$iponly eq $_ }
                                      @ips ) )<br>
                                      # spent 27.4ms making 814 calls to
                                      NetAddr::IP::Lite::broadcast, avg<br>
                                      34µs/call<br>
                                      # spent 9.56ms making 814 calls to<br>
                                      NetAddr::IP::Lite::__ANON__[Ne<wbr>tAddr/IP/Lite.pm:268],
                                      avg 12µs/call<br>
                                      {<br>
                                           return $iponly;<br>
                                      }<br>
                                      <br>
                                      Еще трабла в том что легендарный
                                      List::Util отдает быстро но почему
                                      не тот<br>
                                      же результат( пробовал first ,
                                      none ) что и grep?<br>
                                      <br>
                                      коллеги это нормально на
                                      более-менее среднем сервачке ?<br>
                                      <br>
                                      <br>
                                      --<br>
                                      Moscow.pm mailing list<br>
                                      <a moz-do-not-send="true"
                                        href="mailto:moscow-pm@pm.org"
                                        target="_blank">moscow-pm@pm.org</a>
                                      | <a moz-do-not-send="true"
                                        href="http://moscow.pm.org"
                                        rel="noreferrer" target="_blank">http://moscow.pm.org</a><br>
                                      <br>
                                    </blockquote>
                                  </blockquote>
                                  <br>
                                  -- <br>
                                   <br>
                                  -- <br>
                                  Moscow.pm mailing list<br>
                                  <a moz-do-not-send="true"
                                    href="mailto:moscow-pm@pm.org"
                                    target="_blank">moscow-pm@pm.org</a>
                                  | <a moz-do-not-send="true"
                                    class="m_-599783468089407545moz-txt-link-freetext"
                                    href="http://moscow.pm.org"
                                    target="_blank">http://moscow.pm.org</a><br>
                                </div>
                              </div>
                            </blockquote>
                          </div>
                          <br>
                        </div>
                        <br>
                        <fieldset
                          class="m_-599783468089407545mimeAttachmentHeader"></fieldset>
                        <br>
                      </blockquote>
                      <br>
                      <pre class="m_-599783468089407545moz-signature" cols="72">-- 
 </pre>
                      <br>
                      <fieldset
                        class="m_-599783468089407545mimeAttachmentHeader"></fieldset>
                      <br>
                    </blockquote>
                    <p><br>
                    </p>
                    <br>
                    <fieldset
                      class="m_-599783468089407545mimeAttachmentHeader"></fieldset>
                    <br>
                  </blockquote>
                  <br>
                </div>
              </div>
              <pre class="m_-599783468089407545moz-signature" cols="72">-- 
 </pre>
            </div>
            <br>
            --<br>
            Moscow.pm mailing list<br>
            <a moz-do-not-send="true" href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a>
            | <a moz-do-not-send="true" href="http://moscow.pm.org"
              rel="noreferrer" target="_blank">http://moscow.pm.org</a><br>
            <br>
          </blockquote>
        </div>
        <br>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
 </pre>
  </body>
</html>