I can answer the threading questions...
In xLights, there are two pools of threads used during rendering. The first pool is a very large pool of threads used for rendering the models and groups. Basically, if you bring up your master view for the sequence, everything you see there is assigned a thread. The stuff Gil talks about is handled in this pool. If the thread for a model depends on (is rendered later in the master view AND shares channels) something above it (for example: the model is part of a group that is rendered above it), then that thread does need to wait for the group to render any given frame before it renders it's frame. Thus, slow rendering effects on the large model groups can bog down the rendering of all the models in that group. They pretty much sit around waiting. Also, if the "Max Grid Size" for a group is large, many effects will take a lot longer to render on that group. If you need to speed up rendering for groups, turn that down. A "Butterfly" on a 800max group takes 4x longer than one on a 400max. Maybe turn them down for "most of the year" while sequencing and then turn them up as you get closer to final renders for your show to get them to look a little better.
The second thread pool is much smaller: the number of "threads" that your CPUs support. For example, my Mac is a 6 core, 12 thread CPU so the size is 12. This thread pool is used for very short running mathematically complex but easily splittable computations for various effects. The purpose of this pool is to COMPLETELY utilize all the cores in your machine for effects that can do it. For example, rendering a Butterfly effect on a large matrix can easily be split into multiple parts as none of the pixels being rendered depend on any other pixel. If you have 2 cores, a big butterfly would be split up to use both cores while rendering that effect. This can help speed up rendering in some cases. HOWEVER, many (most) effects cannot leverage this pool. For example, circles cannot as we cannot render two circles at the same time if they are overlapping. Also, this pool was only introduced a few versions ago so we haven't really gone through all the effects and such to get them using it. Another example is "Snow Flakes". In theory we COULD render each flake separately. However, the way its implemented right now makes it impossible. Thus, we have to re-write the snowflakes effect in order to take advantage. It's not something I've had time to do.