Re: [CODE4LIB] many processes, one resultCode for Libraries [EMAIL PROTECTED]

2008-02-18 Thread Durbin, Michael R
This can be done in Java, but like everything in Java the solution is kind of 
lengthy and perhaps requires several classes.

I've attached a simple skeleton program that spawns threads to search but then 
processes only those results returned in the first 10 seconds.  The code for 
performing the searches is obviously missing as is the consolidation code, but 
the concurrency issue is addressed.  In this example the search threads aren't 
killed, but instead left running to finish naturally though their results would 
be ignored if they weren't done in 10 seconds.  It might be better to kill them 
depending on the circumstances.

-Mike

-Original Message-
From: Code for Libraries [mailto:[EMAIL PROTECTED] On Behalf Of Eric Lease 
Morgan
Sent: Monday, February 18, 2008 1:43 PM
To: CODE4LIB@LISTSERV.ND.EDU
Subject: [CODE4LIB] many processes, one resultCode for Libraries [EMAIL 
PROTECTED]

How do I write a computer program that spawns many processes but
returns one result?

I suppose the classic example of my query is the federated search. Get
user input. Send it to many remote indexes. Wait. Combine results.
Return. In this scenario when one of the remote indexes is slow things
grind to a halt.

I have a more modern example. Suppose I want to take advantage of many
Web Services. One might be spell checker. Another might be a
thesaurus. Another might be an index. Another might be a user lookup
function. Given this environment, where each Web Service will return
different sets of streams, how do I query each of them simultaneously
and then aggregate the result? I don't want to so this sequentially. I
want to fork them all at once and wait for their return before a
specific time out. In Perl I can use the system command to fork a
process, but I must wait for it to return. There is another Perl
command allowing me to fork a process and keep going but I don't
remember what it is. Neither one of these solutions seem feasible. Is
the idea of threading in Java suppose to be able to address this
problem?

--
Eric Lease Morgan
University Libraries of Notre Dame

(574) 631-8604


Searcher.java
Description: Searcher.java


Re: [CODE4LIB] many processes, one resultCode for Libraries [EMAIL PROTECTED]

2008-02-18 Thread Godmar Back
If you're doing this in Java, use the java.util.concurrent package and
its Executor and Future framework, instead of using Thread.start/join,
synchronized etc. directly.

Get the book Concurrent Programming in Java: Design Principles and
Patterns  (ISBN 0-201-31009-0) written by the master himself (Doug
Lea; see http://gee.cs.oswego.edu/dl/cpj/ )

 - Godmar

On Feb 18, 2008 2:19 PM, Durbin, Michael R [EMAIL PROTECTED] wrote:
 This can be done in Java, but like everything in Java the solution is kind of 
 lengthy and perhaps requires several classes.

 I've attached a simple skeleton program that spawns threads to search but 
 then processes only those results returned in the first 10 seconds.  The code 
 for performing the searches is obviously missing as is the consolidation 
 code, but the concurrency issue is addressed.  In this example the search 
 threads aren't killed, but instead left running to finish naturally though 
 their results would be ignored if they weren't done in 10 seconds.  It might 
 be better to kill them depending on the circumstances.

 -Mike

 -Original Message-
 From: Code for Libraries [mailto:[EMAIL PROTECTED] On Behalf Of Eric Lease 
 Morgan
 Sent: Monday, February 18, 2008 1:43 PM
 To: CODE4LIB@LISTSERV.ND.EDU
 Subject: [CODE4LIB] many processes, one resultCode for Libraries [EMAIL 
 PROTECTED]

 How do I write a computer program that spawns many processes but
 returns one result?

 I suppose the classic example of my query is the federated search. Get
 user input. Send it to many remote indexes. Wait. Combine results.
 Return. In this scenario when one of the remote indexes is slow things
 grind to a halt.

 I have a more modern example. Suppose I want to take advantage of many
 Web Services. One might be spell checker. Another might be a
 thesaurus. Another might be an index. Another might be a user lookup
 function. Given this environment, where each Web Service will return
 different sets of streams, how do I query each of them simultaneously
 and then aggregate the result? I don't want to so this sequentially. I
 want to fork them all at once and wait for their return before a
 specific time out. In Perl I can use the system command to fork a
 process, but I must wait for it to return. There is another Perl
 command allowing me to fork a process and keep going but I don't
 remember what it is. Neither one of these solutions seem feasible. Is
 the idea of threading in Java suppose to be able to address this
 problem?

 --
 Eric Lease Morgan
 University Libraries of Notre Dame

 (574) 631-8604