В каждой современной операционной системе, о которой я знаю, все работает в потоке, который выполняется в процессе.
ОС может отслеживать несколько процессов, и каждый процесс может содержать произвольное количество потоков. Таким образом, весь код выполняется в потоке и внутри процесса (поскольку поток выполняется в процессе).
Основное различие между ними заключается в том, что каждый процесс имеет свое собственное виртуальное адресное пространство. Отдельные процессы не имеют доступа к данным друг друга, файловым дескрипторам или чему-либо еще и по существу не знают о существовании других процессов.
С другой стороны, каждый поток в процессе совместно использует одно и то же адресное пространство, и поэтому все потоки могут проверять или изменять данные друг друга, вызывать те же функции и все остальное.
Часто (но не всегда) бывает, что одна программа состоит из одного процесса и нескольких потоков.