On Mon, Oct 3, 2011 at 2:25 AM, Jukka Tuominen
<jukka.tuomi...@finndesign.fi> wrote:
>
> Sorry for thinking aload again, but I'm learning these issues myself in the 
> background, and I wonder if something like the following might work?
>
> Concurrent List Processing -idea
>
> Two phase process
>
> 1) Distribution phase
> Create a recursive procedure combining cons and threads so that each item in 
> the original list will be replaced by a named thread. Sending out new threads 
> won't wait for individual threads to return in this phase. The result of this 
> phase is a list of named threads.
>
> 2) Collection phase
> This phase is again a recursive cons process, but this time sequential. It 
> starts from the beginning of the named-thread list, and as soon as the first 
> thread returns its value, it moves on. The process goes on until the end of 
> the list is reached. The resulting list is the return value.

Here's your idea, implemented with futures.  I'm assuming that you
want to apply a particular procedure to each element of the list, as
in `map':

(define (par-map f l)
  (define fs (for/list ([elem (in-list l)]) (future (lambda () (f elem))))
  (map touch fs))

> - If the original list to be processed is very long, then the construction of 
> the second phase list shouldn't wait for bottle neck items to cons the list 
> elsewhere where possible. The speed gain wouldn't be substantial though, 
> since it is just building a list, and you cannot finish it until the last 
> item is available, anyway.

You'd want to basically make the result list into a queue in which
elements are inserted.
-- 
sam th
sa...@ccs.neu.edu

_________________________________________________
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/users

Reply via email to