On Sun, Jul 11, 2010 at 20:00, div0 <div0@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