On Mon, Nov 23, 2009 at 2:09 PM, Steven Schveighoffer
<schvei...@yahoo.com> wrote:
> On Mon, 23 Nov 2009 16:33:42 -0500, dsimcha <dsim...@yahoo.com> wrote:
>
>> But one of my biggest gripes about the current appending implementation,
>> far more
>> important from a practical perspective than any theoretical safety
>> guarantees, is
>> that it doesn't scale to multiple threads.  I've experienced this in a
>> real-world
>> program that I translated from someone else's C++ code that used
>> vector::push_back() quite liberally inside core algorithms.  (The reason
>> is that
>> it was written more for simplicity/readability than performance, so the
>> person who
>> wrote it never thought to optimize this kind of stuff.)  When I did a
>> literal
>> translation of this to D, everything was completely serialized.  It didn't
>> even
>> scale to two cores.  I had to rewrite significant portions of the code in
>> a way
>> that did not use appending to get it to scale at all.
>>
>> D is supposed to be a language that is geared toward multi-threading.  If
>> something as simple as array appending is a threading bottleneck (and it
>> was for
>> me in a real-world program), I don't care if it is O(1) because
>> effectively it has
>> a constant the size of Jupiter.
>
> It's hard to say that your example is a good fit for the arrays of D.  What
> you need is a library type that does not require a global lock for
> appending.  Such is not the case for every example of appending in D, and
> the existence of the current D arrays does not prevent you from adding more
> specialized types.  There are other costs to using such types besides the
> global lock, such as storing the capacity, and if you are slicing, locally
> storing the slice extents.

That's likely to be far too big a limitation for the upcoming world of
parallelism everywhere.
But the single-threaded GC is the real culprit.  Fix that and arrays
shouldn't be a problem either.

--bb

Reply via email to