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