Demystifying threads, lazy initialization, and ThreadPool
The thread is the smallest unit in Windows and it executes instructions in the processor. A process is a bigger executing container, and the thread inside the process is the smallest unit to use processor time and execute instructions. The key thing to remember is that whenever your code needs to be executed in a process, it should be assigned to a thread. Each processor can only execute one instruction at a time; that's why, in a single-core system, at any point time only one thread is being executed. There are scheduling algorithms that are used to allocate processor time to a thread. A thread typically has a stack (which keeps track of execution history), registers in which to store various variables, and counters to hold instructions that need to be executed.
A quick look at Task Manager will give us details regarding the number of physical and logical cores, and navigating to Resource Monitor will tell us about...