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