A process is a set of instructions that is loaded into memory to be executed by a processor or a set of processors. The process description in memory contains all necessary information, such as the Instruction Pointer (also known as the Program Counter), which indicates the next instruction to be executed, as well as registers, variables, file handles, etc., that are needed by the scheduler to execute the program.
This collection of information is known as the execution context, which is required by the CPU to execute the instructions loaded into memory.
A thread is a set of programmed instructions that contains the above-described information and can be independently scheduled by the scheduler from other code in the same program, similar to a process.