What is the difference between a process and a thread in an operating system? How does multi-threading work in your primary programming language?