<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Congratulations on your initial release!<div><br></div><div>My question: How do futures relate to the existing constructs, such as thread-local cells, parameters, and custodians? (Eli raised some questions about the last one. It would be nice to fit futures gracefully into the existing framework.)</div><div><br></div><div>It would be nice if futures could be though of as similar to threads but with special scheduling. For example, if&nbsp;</div><div><br></div><div><div>&nbsp;&nbsp;(let ([f (future (lambda () E1))])</div><div>&nbsp;&nbsp; &nbsp;E2</div><div>&nbsp;&nbsp; &nbsp;(touch f))</div><div><br></div><div>&nbsp;&nbsp;=</div><div><br></div><div>&nbsp;&nbsp;(let* ([chan (make-channel)]</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; [t (thread (lambda () (channel-put chan E1)))])</div><div>&nbsp;&nbsp; &nbsp;E2</div><div>&nbsp;&nbsp; &nbsp;(channel-get chan))</div><div><br></div><div>with respect to thread-local state, shut-down-ability, etc. Or if they need to be different, I'm curious why.</div><div><br></div><div>Ryan</div></div><div><br></div><div><br></div><div>On Dec 7, 2009, at 12:31 PM, James Swaine wrote:</div><div><div><br class="Apple-interchange-newline"><blockquote type="cite">I'm pleased to announce the initial release of parallel futures, a<br> construct for fine-grained parallelism in PLT. Roughly speaking, a<br> programmer passes a thunk to 'future' and it gets run in parallel.<br> That "roughly" holds a few gotchas, partly because we're just getting<br> started and partly due to the technique we're using. See the<br> documentation for more details:<br> <div class="im"><br> &nbsp;<a href="http://pre.plt-scheme.org/docs/html/futures/" target="_blank">http://pre.plt-scheme.org/docs/html/futures/</a><br> <br> </div>If you've got a multicore machine where you can't keep the cores busy<br> or your office/machine room is a bit cold, try this program:<br> <br> #lang scheme<br> (require scheme/futures)<br> (define (loop) (loop))<br> (for-each<br> &nbsp;touch<br> &nbsp;(for/list ([i (in-range 0 (processor-count))])<br> &nbsp; (future loop)))<br> <br> Note that you have to build mzscheme with futures; it isn't enabled by<br> default, but see the docs above for how to do that. Beyond the above,<br> we've also gotten a few parallel kernels going and are seeing good<br> scalability up to 8 cores (the biggest machine we have around for the<br> time being).<br> <div class="im"><br> Many thanks to Matthew, Robby, Kevin, and Peter Dinda, without whom this<br> release wouldn't have been possible.<br> <br> </div>Feedback welcome!<br> <br> James _________________________________________________<br> &nbsp;For list-related administrative tasks:<br> &nbsp;<a href="http://list.cs.brown.edu/mailman/listinfo/plt-dev">http://list.cs.brown.edu/mailman/listinfo/plt-dev</a><br></blockquote></div><br></div></body></html>