Re: Help with concurrent threads

[email protected] ("Jerry D. Hedden") Thu, 6 May 2010 09:26:03 -0400
Newsgroups perl.ithreads
Message-ID <[email protected]>
--0016e6d77f74c72c8d0485ece33b
Content-Type: text/plain; charset=ISO-8859-1

I tweaked it a bit.  Attached.

On Thu, May 6, 2010 at 06:02, alfonso caponi <[email protected]> wrote:
> 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
>
>

--0016e6d77f74c72c8d0485ece33b
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_g8vm17ae1

IyEvdXNyL2Jpbi9wZXJsCgokfD0xOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE5l
dDo6RE5TOwp1c2UgdGhyZWFkczsKdXNlIHRocmVhZHM6OnNoYXJlZDsKdXNlIFRocmVhZDo6UXVl
dWU7CnVzZSBVbmlxOwoKbXkgJGlwX2xpc3QgID0gJEFSR1ZbMF07CgpkaWUgIiQwIDxpcCBsaXN0
IGZpbGU+XG4iIHVubGVzcyAkQVJHVlswXTsKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMg
R2xvYmFsIFZhcmlhYmxlcyAjIyMKCiMgRlFETiBsaXN0Cm15IEBmcWRuID0gKCJ3d3cubmJhLmNv
bSIsInd3dy5nb29nbGUuY29tIiwid3d3Lmtlcm5lbC5vcmciLCJ3d3cubGludXgub3JnIik7Cgoj
IE1heGltdW0gd29ya2luZyB0aHJlYWRzCm15ICRNQVhfVEhSRUFEUyA9IDEwOwoKIyBNYXhpbXVt
IHRocmVhZCB3b3JraW5nIHRpbWUKbXkgJFRJTUVPVVQgPSAxMDsKCiMgRmxhZyB0byBpbmZvcm0g
YWxsIHRocmVhZHMgdGhhdCBhcHBsaWNhdGlvbiBpcyB0ZXJtaW5hdGluZwpteSAkVEVSTSA6c2hh
cmVkID0gMDsKCiMgUHJldmVudHMgZG91YmxlIGRldGFjaCBhdHRlbXB0cwpteSAkREVUQUNISU5H
IDpzaGFyZWQ7CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMgU2lnbmFsIEhhbmRsaW5nICMj
IwoKIyBHcmFjZWZ1bGx5IHRlcm1pbmF0ZSBhcHBsaWNhdGlvbiBvbiBeQyBvciBjb21tYW5kIGxp
bmUgJ2tpbGwnCiRTSUd7J0lOVCd9ID0gJFNJR3snVEVSTSd9ID0gc3ViIHsKICAgIHByaW50KCI+
Pj4gVGVybWluYXRpbmcgPDw8XG4iKTsKICAgICRURVJNID0gMTsKfTsKCiMgVGhpcyBzaWduYWwg
aGFuZGxlciBpcyBjYWxsZWQgaW5zaWRlIHRocmVhZHMKIyB0aGF0IGdldCBjYW5jZWxsZWQgYnkg
dGhlIHRpbWVyIHRocmVhZAokU0lHeydLSUxMJ30gPSBzdWIgewogICAgIyBUZWxsIHVzZXIgd2Un
dmUgYmVlbiB0ZXJtaW5hdGVkCiAgICBwcmludGYoIiUzZCA8LSBLaWxsZWRcbiIsIHRocmVhZHMt
PnRpZCgpKTsKICAgICMgRGV0YWNoIGFuZCB0ZXJtaW5hdGUKICAgIGxvY2soJERFVEFDSElORyk7
CiAgICB0aHJlYWRzLT5kZXRhY2goKSBpZiAhIHRocmVhZHMtPmlzX2RldGFjaGVkKCk7CiAgICB0
aHJlYWRzLT5leGl0KCk7Cn07CgojIyMjIwoKbXkgQGhvc3RzOwpvcGVuKElQTElTVCwgIjwkaXBf
bGlzdCIpIHx8IGRpZSAiRXJyb3IgOiBjYW5ub3Qgb3BlbiB0aGUgaXAgYWRkcmVzcyBsaXN0IGZp
bGU6ICQhXG4iOwogICAgY2hvbXAgKEBob3N0cyA9IDxJUExJU1Q+KTsKY2xvc2UgKElQTElTVCk7
CgpAaG9zdHMgPSB1bmlxIHNvcnQgQGhvc3RzOwoKIyMjIGZpbGwgdGhlIHF1ZXVlCiMgPj4gRG9u
J3QgbmVlZCBhIHNoYXJlZCBxdWV1ZSBmb3IgdGhpcwojID4+IEp1c3QgdXNlIEBob3N0cyBkaXJl
Y3RseQojbXkgJHEgPSBuZXcgVGhyZWFkOjpRdWV1ZTsKI2ZvcmVhY2ggbXkgJGhvc3QgKEBob3N0
cykgewojICAgIGZvcmVhY2ggbXkgJGZxZG4gKEBmcWRuKSB7CiMgICAgICAgICRxLT5lbnF1ZXVl
KCIkaG9zdDskZnFkbiIpOwojICAgIH0KI30KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMKIyMjIE1haW4gUHJvY2Vzc2luZyBTZWN0aW9uICMjIwoKTUFJTjogewoKICAgICMgU3RhcnQg
dGltZXIgdGhyZWFkCiAgICBwcmludCAiWytdIFN0YXJ0IHRpbWVyIHRocmVhZFxuIjsKICAgIG15
ICRxdWV1ZSA9IFRocmVhZDo6UXVldWUtPm5ldygpOwogICAgdGhyZWFkcy0+Y3JlYXRlKCdUaW1l
cicsJHF1ZXVlKS0+ZGV0YWNoKCk7CgogICAgIyBNYW5hZ2UgdGhlIHRocmVhZCBwb29sIHVudGls
IHdlIHJ1biBvdXQgb2YgZGF0YQogICAgIyBvciBzaWduYWxsZWQgdG8gdGVybWluYXRlCiAgICB3
aGlsZSAoQGhvc3RzICYmICEgJFRFUk0pIHsKCiAgICAgICAgIyBLZWVwIG1heCB0aHJlYWRzIHJ1
bm5pbmcKICAgICAgICBmb3IgKG15ICRuZWVkZWQgPSAkTUFYX1RIUkVBRFMgLSB0aHJlYWRzLT5s
aXN0KCk7ICRuZWVkZWQgJiYgISAkVEVSTTsgJG5lZWRlZC0tKSB7CgogICAgICAgICAgICBteSAk
ZWxlbWVudCA9IHNoaWZ0KEBob3N0cyk7CiAgICAgICAgICAgIGxhc3QgaWYgKCEgJGVsZW1lbnQp
OwoKICAgICAgICAgICAgIyBOZXcgdGhyZWFkCiAgICAgICAgICAgIHRocmVhZHMtPmNyZWF0ZSgn
UmVxdWVzdEROUycsJHF1ZXVlLCRlbGVtZW50LCRUSU1FT1VUKTsKICAgICAgICB9CgogICAgICAg
ICMgV2FpdCBmb3IgYW55IHRocmVhZHMgdG8gZmluaXNoCiAgICAgICAgc2xlZXAoMSk7CiAgICB9
CgogICAgIyBXYWl0IGZvciBtYXggdGltZW91dCBmb3IgdGhyZWFkcyB0byBmaW5pc2gKICAgIHdo
aWxlICgodGhyZWFkcy0+bGlzdCgpID4gMCkgJiYgJFRJTUVPVVQtLSkgewogICAgICAgIHNsZWVw
KDEpOwogICAgfQoKICAgICMgRGV0YWNoIGFuZCBraWxsIGFueSByZW1haW5pbmcgdGhyZWFkcwog
ICAgZm9yZWFjaCBteSAkdGhyICh0aHJlYWRzLT5saXN0KCkpIHsKICAgICAgICBsb2NrKCRERVRB
Q0hJTkcpOwogICAgICAgICR0aHItPmRldGFjaCgpIGlmICEgJHRoci0+aXNfZGV0YWNoZWQoKTsK
ICAgICAgICAkdGhyLT5raWxsKCdLSUxMJyk7CiAgICB9Cn0KCmV4aXQoMCk7CgpzdWIgUmVxdWVz
dEROUyB7CgogICAgbXkgKCRxdWV1ZSwkZWxlbWVudCwkdGltZW91dCkgPSBAXzsKCiAgICBteSAo
JGRuc19zZXJ2ZXIsJGZxZG4pID0gc3BsaXQoLzsvLCRlbGVtZW50KTsKCiAgICAjIE15IHRocmVh
ZCBJRAogICAgbXkgJHRpZCA9IHRocmVhZHMtPnRpZCgpOwogICAgcHJpbnRmKCIkZG5zX3NlcnZl
ciAtPiAlM2RcbiIsICR0aWQpOwoKICAgICMgUmVnaXN0ZXIgd2l0aCB0aW1lciB0aHJlYWQKICAg
ICRxdWV1ZS0+ZW5xdWV1ZSgkdGlkLCR0aW1lb3V0KTsKCiAgICAjIERvIHNvbWUgd29yayB3aGls
ZSBtb25pdG9yaW5nICRURVJNCiAgICAjd2hpbGUgKCEgJFRFUk0pIHsKCiAgICAgICAgcHJpbnQg
InRyeSAkZG5zX3NlcnZlcjskZnFkblxuIjsKCiAgICAgICAgbXkgJHJlcyA9IE5ldDo6RE5TOjpS
ZXNvbHZlci0+bmV3OwogICAgICAgICRyZXMtPm5hbWVzZXJ2ZXJzKCRkbnNfc2VydmVyKTsKCiAg
ICAgICAgbXkgJHF1ZXJ5ID0gJHJlcy0+cXVlcnkoJGZxZG4sIkEiKTsKCiAgICAgICAgaWYgKCRx
dWVyeSkgewogICAgICAgICAgICBmb3JlYWNoIG15ICRyciAoZ3JlcCB7ICRfLT50eXBlIGVxICdB
JyB9ICRxdWVyeS0+YW5zd2VyKSB7CiAgICAgICAgICAgICAgICBteSAkcmVwbHkgPSAkcnItPmFk
ZHJlc3M7CiAgICAgICAgICAgICAgICBwcmludCAiJGRuc19zZXJ2ZXI7JGZxZG47JHJlcGx5XG4i
OwogICAgICAgICAgICB9CiAgICAgICAgfSMgZWxzZSB7CiAgICAgICAgIyAgICB3YXJuICJxdWVy
eSBmYWlsZWQ6ICRkbnNfc2VydmVyICgkZnFkbikiLCAkcmVzLT5lcnJvcnN0cmluZywgIlxuIjsK
ICAgICAgICAjfQogICAgI30KCiAgICAjIFJlbW92ZSBzaWduYWwgaGFuZGxlcgogICAgJFNJR3sn
S0lMTCd9ID0gc3ViIHt9OwoKICAgICMgVW5yZWdpc3RlciB3aXRoIHRpbWVyIHRocmVhZAogICAg
JHF1ZXVlLT5lbnF1ZXVlKCR0aWQsIHVuZGVmKTsKCiAgICAjIFRlbGwgdXNlciB3ZSdyZSBkb25l
CiAgICBwcmludGYoIiUzZCA8LSBGaW5pc2hlZFxuIiwgJHRpZCk7CgogICAgIyBEZXRhY2ggYW5k
IHRlcm1pbmF0ZQogICAgbG9jaygkREVUQUNISU5HKTsKICAgIHRocmVhZHMtPmRldGFjaCgpIGlm
ICEgdGhyZWFkcy0+aXNfZGV0YWNoZWQoKTsKICAgIHRocmVhZHMtPmV4aXQoKTsKfQoKIyBUaGUg
dGltZXIgdGhyZWFkIHRoYXQgbW9uaXRvcnMgb3RoZXIgdGhyZWFkcyBmb3IgdGltZW91dApzdWIg
VGltZXIgewoKICAgIG15ICRxdWV1ZSA9IHNoaWZ0OyAgICMgVGhlIHJlZ2lzdHJhdGlvbiBxdWV1
ZQogICAgbXkgJXRpbWVyczsgICAgICAgICAgIyBDb250YWlucyB0aHJlYWRzIGFuZCB0aW1lb3V0
cwoKICAgICMgTG9vcCB1bnRpbCB0b2xkIHRvIHF1aXQKICAgIHdoaWxlICghICRURVJNKSB7Cgog
ICAgICAgICMgQ2hlY2sgcXVldWUKICAgICAgICB3aGlsZSAobXkgJHRpZCA9ICRxdWV1ZS0+ZGVx
dWV1ZV9uYigpKSB7CiAgICAgICAgICAgIGlmICghICgkdGltZXJzeyR0aWR9eyd0aW1lb3V0J30g
PSAkcXVldWUtPmRlcXVldWUoKSkgfHwgISAoJHRpbWVyc3skdGlkfXsndGhyZWFkJ30gID0gdGhy
ZWFkcy0+b2JqZWN0KCR0aWQpKSkgewogICAgICAgICAgICAgICAgIyBObyB0aW1lb3V0IC0gdW5y
ZWdpc3RlciB0aHJlYWQKICAgICAgICAgICAgICAgIGRlbGV0ZSgkdGltZXJzeyR0aWR9KTsKICAg
ICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBDYW5jZWwgdGltZWQgb3V0IHRocmVhZHMK
ICAgICAgICBmb3JlYWNoIG15ICR0aWQgKGtleXMoJXRpbWVycykpIHsKICAgICAgICAgICAgaWYg
KC0tJHRpbWVyc3skdGlkfXsndGltZW91dCd9IDwgMCkgewogICAgICAgICAgICAgICAgJHRpbWVy
c3skdGlkfXsndGhyZWFkJ30tPmtpbGwoJ0tJTEwnKTsKICAgICAgICAgICAgICAgIGRlbGV0ZSgk
dGltZXJzeyR0aWR9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBUaWNrIHRv
Y2sKICAgICAgICBzbGVlcCgxKTsKICAgIH0KfQo=
--0016e6d77f74c72c8d0485ece33b--