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