On Jan 23, 2009, at 14:04, Rich Hickey wrote:

>> Then why not make a pipeline using lazy sequences right from the
>> start? I don't see anything that I could do better with streams than
>> with lazy sequences.
>>
>
> There are a couple of advantages. First, streams are faster, at least
> 2x faster. Since a lazy sequence must allocate per stage, a multi-
> stage pipeline would incur multiple allocations per step. A stream
> could be built that has no allocation other than the results. If your
> calculations per step are significant, they'll dominate the time. but
> when they are not, this allocation time matters.
>
> Second, streams are fully lazy. Seqs could be made fully lazy, but
> currently are not.
>
> Third, stream iters currently provide transparent MT access. Doing the
> same for a seq means wrapping it in a ref.

Thanks for those explanations, that makes a lot of sense.

I just wonder about the performance aspect. If I have a pipeline  
stage with very little computational cost, say adding 1 to every  
element, the I would expect the overhead of the iter layer and the  
thread-safeness to dominate CPU time anyway. Does an allocation  
really add that much on top of that that it makes a difference?

Konrad.




--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to