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