This question is posed to fill a gap in my understanding of "How things work"

I wonder if anyone can tell me, or link me to a good explanation, about what is involved in converting a program to run multi-threaded.

I also wonder about the efficiencies of doing such.

I know SQRT(0) about programming so just a general view about the complexity is what I seek.