Here are some quick answers for you. For more indepth info just do a search of this site:
system, stripped down of security features, is simply a fork() and exec(). fork() creates a new process space which exec() populates with whatever process you specified in the shell call.
Backticks fire off the shell call in a separate process, then captures STDOUT from it.
Threads have far less overhead than a process and are contained within the process which allows concurrent handling of instructions.
You may fork() and specify further perl code instead of an exec so that you end up with multiple perl interpreters running in separate process spaces.
At any time, you can call exec() which then "overwrites" the process space with a new binary with some exceptions like file descriptors. This is useful to redirect streams before handing over the streams to some process.