Multi-threading

This is the technique of breaking a complicated task up over multiple threads. They will still share the same virtual memory and be tied to the same process but can be executed in parallel if scheduled on different kernel threads.