They don't take a thread from the three-thread pool used by the tag events subsystem, but borrow a thread from the tag subsystem itself, I think. (You could deliberately throw some exceptions in a callback to investigate the thread origin.)
Use a gateway tag event script (in the project) for the heavy workload requirements. If there is some detail of the situation that requires they be tag valueChange events, consider this technique: