Single Thread:
If a component is marked as single threaded, then all methods of that component
will execute on the main thread. There is one main thread for each MTS application.
Since there is only one thread, it means that only one method can execute at any
given time. If there are multiple single threaded components that are being accessed
my multiple client simultaneouslym then it is easy to see why a bottleneck will
occur. Since only one method can execute at a time, all of the other methods will be
sitting around waiting their turn. This can essentially grind a system to a halt.
A good rule of thumb to remember is single threading = bad
Apartment Thread:
If a component is marked as apartment threaded, each method of that component will
execute on a thread that is associated with that component. Since each component
running inside MTS has its own thread, this separates the methods into their own
aparments, with each instance of a component corresponding to one apartment. While
there is only one thread inside of a component, each instance of that component will
have its own thread apartment. This will alleviate a great number of the problems
that a single threaded component has. Since multiple components can be executing
methods in their own apartments simultaneously, the scalability constraint that the
single threaded components have are greatly relaxed.