Grokking concurrency, message passing and Co

Philippe Sigaud philippe.sigaud at gmail.com
Sun Jul 11 12:29:44 PDT 2010


On Sun, Jul 11, 2010 at 20:00, div0 <div0 at users.sourceforge.net> wrote:

> On 11/07/2010 15:28, Philippe Sigaud wrote:
>
>  - Why is a 2 threads version repeatedly thrice as fast as a no thread
>> version?
>> I thought it'd be only twice as fast.
>>
>
> Well if you are running on windows, my guess is that your 2nd cpu is
> completely free of tasks, so the thread running on that one is more
> efficient. I'm pretty sure that the windows task scheduler trys as much as
> possible to keep threads running on the last cpu they where on, to reduce
> cache flushes and memory paging.
>
> On your first cpu you'll be paying for the task switching amongst the OS
> threads & programs. Even if they aren't using much actual cpu time, there's
> still a very high cost to perform the task swaps.
>
> Your program is obviously very artificial; with a more normal program
> you'll see the ratio drop back down to less than twice as fast.
>
>
OK, I get it. Thanks for the explanation!


>
>  - It's fun to see the process running under windows: first only 50% CPU (1
>> thread), then it jumps to ~100%, while the memory is slowly growing. Then
>> brutally back to 50% CPU (no thread).
>> - 1024 threads are OK, but I cannot reach 2048. Why? What is the limit for
>> the
>> number of spawn I can do? Would that be different if each threads spawn
>> two
>> sub-threads instead of the main one generating 2048?
>>
>
> How many did you expect to run? Under 'doze each thread by default gets a
> megabyte of virtual address space for it's stack. So at about 1000 threads
> you'll be using all of your programs 2GB of address then the thread spawn
> will fail.
>

That's it, I can get much higher than 1000, for 2 GB of RAM.
Then it fail with a core.thread.ThreadException: could not create thread.

I tried this because I was reading an article on Scala's actors, where they
talk about millions of actors. I guess they are quite different.



>
> Not sure about linux, but a similar limitation must apply.
>
> The rule of thumb is don't bother spawning more threads than you have cpus.
> You're just wasting resources mostly.
>

OK. So it means for joe average not much more than 2-8 threads?

Thanks!

Philippe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d-learn/attachments/20100711/10d62739/attachment.html>


More information about the Digitalmars-d-learn mailing list