problem with parallel foreach

weaselcat via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed May 13 05:16:17 PDT 2015


On Wednesday, 13 May 2015 at 09:01:05 UTC, Gerald Jansen wrote:
> On Wednesday, 13 May 2015 at 03:19:17 UTC, thedeemon wrote:
>> In case of Python's parallel.Pool() separate processes do the 
>> work without any synchronization issues. In case of D's 
>> std.parallelism it's just threads inside one process and they 
>> do fight for some locks, thus this result.
>
> Okay, so to do something equivalent I would need to use 
> std.process. My next question is how to pass the common data to 
> the sub-processes. In the Python approach I guess this is 
> automatically looked after by pickling serialization. Is there 
> something similar in D? Alternatively, would the use of 
> std.mmfile to temporarily store the common data be a reasonable 
> approach?

Assuming you're on a POSIX compliant platform, you would just 
take advantage of fork()'s shared memory model and pipes - i.e, 
read the data, then fork in a loop to process it, then use pipes 
to communicate. It ran about 3x faster for me by doing this, and 
obviously scales with the workloads you have(the provided data 
only seems to have 2.) If you could provide a larger dataset and 
the python implementation, that would be great.

I'm actually surprised and disappointed that there isn't a 
fork()-backend to std.process OR std.parallel. You have to use 
stdc


More information about the Digitalmars-d-learn mailing list