A computer process is an instance of a running program. Processes are actually heavyweight, so we may prefer threads, which are lighter. In fact, threads are often just subunits of a process. Processes are separated from each other, while threads can share instructions and data.
Operating systems typically assign one thread to each core (if there are more than one), or switch between threads periodically; this is called time slicing. Threads as processes can have different priorities and the operating system has daemon threads running in the background with very low priority.
It's easier to switch between threads than between processes; however, because threads share information, they are more dangerous to use. For instance, if multiple threads are able to increment a counter at the same time, this will make the code nondeterministic and potentially incorrect. One way to minimize risks is to make sure that only one thread can access a shared...