<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">по сути лучше не использовать ip адреса
      в виде scalar string<br>
      переведи адреса в integer и будет много быстрее.<br>
      Плюс вместо цикла перебора и поиска можно уйти на Cache::FastMmap
      и работать через ключи. выборка будет быстрее чем поиск по
      массиву.<br>
      <br>
      On 25.11.2016 15:36, Naim Sh via Moscow-pm wrote:<br>
    </div>
    <blockquote
      cite="mid:48fb29f0-6e65-ed8f-732a-c3d86973ae24@gmail.com"
      type="cite">
      <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
      <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" class="moz-txt-link-abbreviated"
                href="mailto:moscow-pm@pm.org">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">
              <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></blockquote>
                                    </blockquote>
                                  </div>
                                </div>
                              </blockquote>
                            </div>
                          </div>
                        </blockquote>
                      </blockquote>
                    </blockquote>
                  </div>
                </div>
              </div>
            </blockquote>
          </div>
        </div>
      </blockquote>
    </blockquote>
    <br>
  </body>
</html>