Re: Help with concurrent threads

[email protected] (alfonso caponi) Thu, 6 May 2010 12:02:39 +0200
Newsgroups perl.ithreads
Message-ID <[email protected]>
--0016e6d77e91fb63da0485ea0a54
Content-Type: multipart/alternative; boundary=0016e6d77e91fb63d30485ea0a52

--0016e6d77e91fb63d30485ea0a52
Content-Type: text/plain; charset=ISO-8859-1

Inspired by the pool.pl example, I wrote a simple multi-thread script for
dns server testing on my LAN. It seems working fine, but I would like your
opinion on any improvements.

Note: I've commented "#while (! $TERM)" to avoid multiple requests while !
$TERM :(

Thank you very much at all!

2010/4/16 Jerry D. Hedden <[email protected]>

> Get the 'threads' distribution from CPAN and look at the sample
> scripts in the 'examples' directory.
>
> On Fri, Apr 16, 2010 at 11:48, alfonso caponi <[email protected]>
> wrote:
> > Hi list,
> >
> > I've some doubts with a multi-threads script. My goal is to create a
> script
> > with the same max number of threads running at all times.
> >
> > For example: I've an array with 9 elements and 3 threads to process it;
> each
> > thread can process an element using a different time (a thread could end
> > before another) and I would like 3 threads always running.
> >
> > My idea is to take an element from a queue, start threads to reach the
> > maximum number of active threads allowed and simultaneously start a
> separate
> > (but unique) thread to wait every thread in execution.
> >
> > In attachment my "solution". Have you any tips? I would not use other
> > modules as well threads, threads::shared, thread::queue.
> >
> > Thank you very much!
> > Al
>

--0016e6d77e91fb63d30485ea0a52
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

Inspired by the <a href=3D"http://pool.pl">pool.pl</a> example, I wrote a s=
imple multi-thread script for dns server testing on my LAN. It seems workin=
g fine, but I would like your opinion on any improvements.<br><br>Note: I&#=
39;ve commented &quot;#while (! $TERM)&quot; to avoid multiple requests whi=
le ! $TERM :(<br>
<br>Thank you very much at all!<br><br><div class=3D"gmail_quote">2010/4/16=
 Jerry D. Hedden <span dir=3D"ltr">&lt;<a href=3D"mailto:[email protected]"=
>[email protected]</a>&gt;</span><br><blockquote class=3D"gmail_quote" styl=
e=3D"margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); =
padding-left: 1ex;">
Get the &#39;threads&#39; distribution from CPAN and look at the sample<br>
scripts in the &#39;examples&#39; directory.<br>
<div><div></div><div class=3D"h5"><br>
On Fri, Apr 16, 2010 at 11:48, alfonso caponi &lt;<a href=3D"mailto:alfonso=
[email protected]">[email protected]</a>&gt; wrote:<br>
&gt; Hi list,<br>
&gt;<br>
&gt; I&#39;ve some doubts with a multi-threads script. My goal is to create=
 a script<br>
&gt; with the same max number of threads running at all times.<br>
&gt;<br>
&gt; For example: I&#39;ve an array with 9 elements and 3 threads to proces=
s it; each<br>
&gt; thread can process an element using a different time (a thread could e=
nd<br>
&gt; before another) and I would like 3 threads always running.<br>
&gt;<br>
&gt; My idea is to take an element from a queue, start threads to reach the=
<br>
&gt; maximum number of active threads allowed and simultaneously start a se=
parate<br>
&gt; (but unique) thread to wait every thread in execution.<br>
&gt;<br>
&gt; In attachment my &quot;solution&quot;. Have you any tips? I would not =
use other<br>
&gt; modules as well threads, threads::shared, thread::queue.<br>
&gt;<br>
&gt; Thank you very much!<br>
&gt; Al<br>
</div></div></blockquote></div><br>

--0016e6d77e91fb63d30485ea0a52--
--0016e6d77e91fb63da0485ea0a54
Content-Type: text/plain; charset=US-ASCII; name="test_dns.txt"
Content-Disposition: attachment; filename="test_dns.txt"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_g8veopnc0

IyEvdXNyL2Jpbi9wZXJsDQoNCiR8PTE7DQoNCnVzZSBzdHJpY3Q7DQp1c2Ugd2FybmluZ3M7DQoN
CnVzZSBOZXQ6OkROUzsNCnVzZSB0aHJlYWRzOw0KdXNlIHRocmVhZHM6OnNoYXJlZDsNCnVzZSBU
aHJlYWQ6OlF1ZXVlOw0KdXNlIFVuaXE7DQoNCm15ICRpcF9saXN0ICA9ICRBUkdWWzBdOw0KDQpk
aWUgIiQwIDxpcCBsaXN0IGZpbGU+XG4iIHVubGVzcyAkQVJHVlswXTsNCg0KIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjDQojIyMgR2xvYmFsIFZhcmlhYmxlcyAjIyMNCg0KIyBGUUROIGxpc3QNCm15
IEBmcWRuID0gKCJ3d3cubmJhLmNvbSIsInd3dy5nb29nbGUuY29tIiwid3d3Lmtlcm5lbC5vcmci
LCJ3d3cubGludXgub3JnIik7DQoNCiMgTWF4aW11bSB3b3JraW5nIHRocmVhZHMNCm15ICRNQVhf
VEhSRUFEUyA9IDEwOw0KDQojIE1heGltdW0gdGhyZWFkIHdvcmtpbmcgdGltZQ0KbXkgJFRJTUVP
VVQgPSAxMDsNCg0KIyBGbGFnIHRvIGluZm9ybSBhbGwgdGhyZWFkcyB0aGF0IGFwcGxpY2F0aW9u
IGlzIHRlcm1pbmF0aW5nDQpteSAkVEVSTSA6c2hhcmVkID0gMDsNCg0KIyBQcmV2ZW50cyBkb3Vi
bGUgZGV0YWNoIGF0dGVtcHRzDQpteSAkREVUQUNISU5HIDpzaGFyZWQ7DQoNCiMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjDQojIyMgU2lnbmFsIEhhbmRsaW5nICMjIw0KDQojIEdyYWNlZnVsbHkgdGVy
bWluYXRlIGFwcGxpY2F0aW9uIG9uIF5DIG9yIGNvbW1hbmQgbGluZSAna2lsbCcNCiRTSUd7J0lO
VCd9ID0gJFNJR3snVEVSTSd9ID0gc3ViIHsNCglwcmludCgiPj4+IFRlcm1pbmF0aW5nIDw8PFxu
Iik7DQoJJFRFUk0gPSAxOw0KfTsNCg0KIyBUaGlzIHNpZ25hbCBoYW5kbGVyIGlzIGNhbGxlZCBp
bnNpZGUgdGhyZWFkcw0KIyB0aGF0IGdldCBjYW5jZWxsZWQgYnkgdGhlIHRpbWVyIHRocmVhZA0K
JFNJR3snS0lMTCd9ID0gc3ViIHsNCgkjIFRlbGwgdXNlciB3ZSd2ZSBiZWVuIHRlcm1pbmF0ZWQN
CglwcmludGYoIiUzZCA8LSBLaWxsZWRcbiIsIHRocmVhZHMtPnRpZCgpKTsNCgkjIERldGFjaCBh
bmQgdGVybWluYXRlDQoJbG9jaygkREVUQUNISU5HKTsNCgl0aHJlYWRzLT5kZXRhY2goKSBpZiAh
IHRocmVhZHMtPmlzX2RldGFjaGVkKCk7DQoJdGhyZWFkcy0+ZXhpdCgpOw0KfTsNCg0KIyMjIyMN
Cg0KbXkgQGhvc3RzOw0Kb3BlbihJUExJU1QsICI8JGlwX2xpc3QiKSB8fCBkaWUgIkVycm9yIDog
Y2Fubm90IG9wZW4gdGhlIGlwIGFkZHJlc3MgbGlzdCBmaWxlOiAkIVxuIjsNCgljaG9tcCAoQGhv
c3RzID0gPElQTElTVD4pOw0KY2xvc2UgKElQTElTVCk7DQoNCkBob3N0cyA9IHVuaXEgc29ydCBA
aG9zdHM7DQoNCiMjIyBmaWxsIHRoZSBxdWV1ZQ0Kb3VyICRxIDpzaGFyZWQ7DQokcSA9IG5ldyBU
aHJlYWQ6OlF1ZXVlOw0KZm9yZWFjaCBteSAkaG9zdCAoQGhvc3RzKSB7DQoJZm9yZWFjaCBteSAk
ZnFkbiAoQGZxZG4pIHsNCgkJJHEtPmVucXVldWUoIiRob3N0OyRmcWRuIik7DQoJfQ0KfQ0KDQoj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMgTWFpbiBQcm9jZXNzaW5nIFNlY3Rp
b24gIyMjDQoNCk1BSU46IHsNCg0KCSMgU3RhcnQgdGltZXIgdGhyZWFkDQoJcHJpbnQgIlsrXSBT
dGFydCB0aW1lciB0aHJlYWRcbiI7DQoJbXkgJHF1ZXVlID0gVGhyZWFkOjpRdWV1ZS0+bmV3KCk7
DQoJdGhyZWFkcy0+Y3JlYXRlKCdUaW1lcicsJHF1ZXVlKS0+ZGV0YWNoKCk7DQoNCgkjIE1hbmFn
ZSB0aGUgdGhyZWFkIHBvb2wgdW50aWwgc2lnbmFsbGVkIHRvIHRlcm1pbmF0ZQ0KCXdoaWxlICgh
ICRURVJNKSB7DQoNCgkJIyBLZWVwIG1heCB0aHJlYWRzIHJ1bm5pbmcNCgkJZm9yIChteSAkbmVl
ZGVkID0gJE1BWF9USFJFQURTIC0gdGhyZWFkcy0+bGlzdCgpOyAkbmVlZGVkICYmICEgJFRFUk07
ICRuZWVkZWQtLSkgew0KDQoJCQlteSAkZWxlbWVudCA9ICRxLT5kZXF1ZXVlX25iOw0KDQoJCQkj
IE5ldyB0aHJlYWQNCgkJCXRocmVhZHMtPmNyZWF0ZSgnUmVxdWVzdEROUycsJHF1ZXVlLCRlbGVt
ZW50LCRUSU1FT1VUKTsNCgkJfQ0KDQoJCSMgV2FpdCBmb3IgYW55IHRocmVhZHMgdG8gZmluaXNo
DQoJCXNsZWVwKDEpOw0KCX0NCg0KCSMgV2FpdCBmb3IgbWF4IHRpbWVvdXQgZm9yIHRocmVhZHMg
dG8gZmluaXNoDQoJd2hpbGUgKCh0aHJlYWRzLT5saXN0KCkgPiAwKSAmJiAkVElNRU9VVC0tKSB7
DQoJCXNsZWVwKDEpOw0KCX0NCg0KCSMgRGV0YWNoIGFuZCBraWxsIGFueSByZW1haW5pbmcgdGhy
ZWFkcw0KCWZvcmVhY2ggbXkgJHRociAodGhyZWFkcy0+bGlzdCgpKSB7DQoJCWxvY2soJERFVEFD
SElORyk7DQoJCSR0aHItPmRldGFjaCgpIGlmICEgJHRoci0+aXNfZGV0YWNoZWQoKTsNCgkJJHRo
ci0+a2lsbCgnS0lMTCcpOw0KCX0NCn0NCg0KZXhpdCgwKTsNCg0Kc3ViIFJlcXVlc3RETlMgew0K
DQoJbXkgKCRxdWV1ZSwkZWxlbWVudCwkdGltZW91dCkgPSBAXzsNCg0KCW15ICgkZG5zX3NlcnZl
ciwkZnFkbikgPSBzcGxpdCgvOy8sJGVsZW1lbnQpOw0KDQoJIyBNeSB0aHJlYWQgSUQNCglteSAk
dGlkID0gdGhyZWFkcy0+dGlkKCk7DQoJcHJpbnRmKCIkZG5zX3NlcnZlciAtPiAlM2RcbiIsICR0
aWQpOw0KDQoJIyBSZWdpc3RlciB3aXRoIHRpbWVyIHRocmVhZA0KCSRxdWV1ZS0+ZW5xdWV1ZSgk
dGlkLCR0aW1lb3V0KTsNCg0KCSMgRG8gc29tZSB3b3JrIHdoaWxlIG1vbml0b3JpbmcgJFRFUk0N
Cgkjd2hpbGUgKCEgJFRFUk0pIHsNCg0KCQlwcmludCAidHJ5ICRkbnNfc2VydmVyOyRmcWRuXG4i
Ow0KDQoJCW15ICRyZXMgPSBOZXQ6OkROUzo6UmVzb2x2ZXItPm5ldzsNCgkJJHJlcy0+bmFtZXNl
cnZlcnMoJGRuc19zZXJ2ZXIpOw0KDQoJCW15ICRxdWVyeSA9ICRyZXMtPnF1ZXJ5KCRmcWRuLCJB
Iik7DQoNCgkJaWYgKCRxdWVyeSkgew0KCQkJZm9yZWFjaCBteSAkcnIgKGdyZXAgeyAkXy0+dHlw
ZSBlcSAnQScgfSAkcXVlcnktPmFuc3dlcikgew0KCQkJCW15ICRyZXBseSA9ICRyci0+YWRkcmVz
czsNCgkJCQlwcmludCAiJGRuc19zZXJ2ZXI7JGZxZG47JHJlcGx5XG4iOw0KCQkJfQ0KCQl9IyBl
bHNlIHsNCgkJIwl3YXJuICJxdWVyeSBmYWlsZWQ6ICRkbnNfc2VydmVyICgkZnFkbikiLCAkcmVz
LT5lcnJvcnN0cmluZywgIlxuIjsNCgkJI30NCgkjfQ0KDQoJIyBSZW1vdmUgc2lnbmFsIGhhbmRs
ZXINCgkkU0lHeydLSUxMJ30gPSBzdWIge307DQoNCgkjIFVucmVnaXN0ZXIgd2l0aCB0aW1lciB0
aHJlYWQNCgkkcXVldWUtPmVucXVldWUoJHRpZCwgdW5kZWYpOw0KDQoJIyBUZWxsIHVzZXIgd2Un
cmUgZG9uZQ0KCXByaW50ZigiJTNkIDwtIEZpbmlzaGVkXG4iLCAkdGlkKTsNCg0KCSMgRGV0YWNo
IGFuZCB0ZXJtaW5hdGUNCglsb2NrKCRERVRBQ0hJTkcpOw0KCXRocmVhZHMtPmRldGFjaCgpIGlm
ICEgdGhyZWFkcy0+aXNfZGV0YWNoZWQoKTsNCgl0aHJlYWRzLT5leGl0KCk7DQp9DQoNCiMgVGhl
IHRpbWVyIHRocmVhZCB0aGF0IG1vbml0b3JzIG90aGVyIHRocmVhZHMgZm9yIHRpbWVvdXQNCnN1
YiBUaW1lciB7DQoNCglteSAkcXVldWUgPSBzaGlmdDsgICAjIFRoZSByZWdpc3RyYXRpb24gcXVl
dWUNCglteSAldGltZXJzOyAgICAgICAgICAjIENvbnRhaW5zIHRocmVhZHMgYW5kIHRpbWVvdXRz
DQoNCgkjIExvb3AgdW50aWwgdG9sZCB0byBxdWl0DQoJd2hpbGUgKCEgJFRFUk0pIHsNCg0KCQkj
IENoZWNrIHF1ZXVlDQoJCXdoaWxlIChteSAkdGlkID0gJHF1ZXVlLT5kZXF1ZXVlX25iKCkpIHsN
CgkJCWlmICghICgkdGltZXJzeyR0aWR9eyd0aW1lb3V0J30gPSAkcXVldWUtPmRlcXVldWUoKSkg
fHwgISAoJHRpbWVyc3skdGlkfXsndGhyZWFkJ30gID0gdGhyZWFkcy0+b2JqZWN0KCR0aWQpKSkg
ew0KCQkJCSMgTm8gdGltZW91dCAtIHVucmVnaXN0ZXIgdGhyZWFkDQoJCQkJZGVsZXRlKCR0aW1l
cnN7JHRpZH0pOw0KCQkJfQ0KCQl9DQoNCgkJIyBDYW5jZWwgdGltZWQgb3V0IHRocmVhZHMNCgkJ
Zm9yZWFjaCBteSAkdGlkIChrZXlzKCV0aW1lcnMpKSB7DQoJCQlpZiAoLS0kdGltZXJzeyR0aWR9
eyd0aW1lb3V0J30gPCAwKSB7DQoJCQkJJHRpbWVyc3skdGlkfXsndGhyZWFkJ30tPmtpbGwoJ0tJ
TEwnKTsNCgkJCQlkZWxldGUoJHRpbWVyc3skdGlkfSk7DQoJCQl9DQoJCX0NCg0KCQkjIFRpY2sg
dG9jaw0KCQlzbGVlcCgxKTsNCgl9DQp9DQo=
--0016e6d77e91fb63da0485ea0a54--