1. Explain the difference between a process and a thread.
A process is an independent program in execution. It has its own memory space, resources, address space. A thread is a smaller unit of execution within a process. Threads share the same address space and resources of their parent process but have their own program counter and stack. Using threads is lighter weight, faster to switch between, and useful for concurrency inside a process, but you must handle synchronization carefully.