Background:
In my application written in C++, I have created 3 threads:
Threads consume resources such as memory. A blocking/unblocking thread incurs a once off cost. If a thread blocking/unblocks tens of thousands of times per second this can waste significant amounts of CPU.
However once a thread is blocked, it doesn't matter how long it is blocked for, there is no ongoing cost. The popular way to find performance problems is to use profilers.
However, I do this a lot, and my method is this: http://www.wikihow.com/Optimize-Your-Program%27s-Performance