views:

151

answers:

4

Hi everyone,

My Previous Question

From the above answer, means if in my threads has create objects, i will face memory allocation/deallocation bottleneck, thus result running threads may slower or no obvious time taken diff. than no thread. What's the advantages of running multi threads in the application if I cannot allocate memory to create the object for calculations in my thread?

+9  A: 

What's the advantages of running multi threads in the application if I cannot allocate memory to create the objects for calculations in my thread?

It depends on where your bottlenecks are. If your bottleneck is the amount of memory available, then creating more threads won't help. Or, if I/O is a bottleneck, trying to parallelize will just slightly slow down everything because of context switching. It's like trying to make an underpowered car faster by putting wider tyres in it: fixing the wrong thing doesn't help.

Threads are useful when the bottleneck is the processor and there are several processors available.

Joonas Pulakka
Thanks for reply.
+1 for the "fixing the wrong thing doesn't help."
Gerry
aka "Premature optimization..." leading most certainly to wrong optimization
François
+2  A: 

Well, if you allocate chunks of memory in a loop, things will slow down.

If you can create your objects once at the beginning of TThread.execute, the overhead will be smaller.

Threads can also be benificial if you have to wait for IO-operations, or if you have expensive calculations to do on a machine with more than one physical core.

sum1stolemyname
Thanks for reply.
A: 

When it comes to multithreding, shared resources issues will always arise (with current technology). All resources that may need serialization (RAM, disk, etc.) are a possible bottleneck. Multithreading is not a magic solution that turns a slow app in a fast one, and not always result in better speed. Made in the wrong way, it can actually result in worse speed. it should be analyzed to find possible bottlenecks, and some parts could need to be rewritten to minimize bottlenecks using different techniques (i.e. preallocating memory, using async I/O, etc.). Anyway, performance is only one of the reasons to use more than one thread. There are several other reason, for example letting the user to be able to interact with the application while background threads perform operations (i.e. printing, checking data, etc.) without "locking" the user. The application that way could seem "faster" (the user can keep on using it without waiting) even if it is actually slowerd (it takes more time to finish operations than if made them serially).

ldsandon
+1  A: 

If you have memory intensive threads (many memory allocations/deallocations) you better use TopMM instead of FastMM: http://www.topsoftwaresite.nl/

FastMM uses a lock which blocks all other threads, TopMM does not so it scales much better on multi cores/cpus!

André