<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>