Multithreading 线程与进程

Multithreading 线程与进程,multithreading,process,threadpool,Multithreading,Process,Threadpool,1) 为什么线程创建比进程创建便宜 2) 线程和子进程之间的区别是什么?这与上面的问题有什么关系?当创建一个进程时,它被分配堆和堆栈内存。另一方面,线程只获取堆栈并与父进程共享堆。这意味着,即使只考虑内存分配,创建一个进程比线程更昂贵, 子流程只是由另一个流程创建的流程。它们在其他方面是独立的,并且有自己的内存空间。以下是。这个问题的答案可能非常依赖于操作系统,但有一条一般规则: 进程的线程与其父进程位于同一虚拟内存空间中。因此,线程创建比进程创建便宜,因为底层操作系统不需要创建完整的虚拟内存空

1) 为什么线程创建比进程创建便宜


2) 线程和子进程之间的区别是什么?这与上面的问题有什么关系?

当创建一个进程时,它被分配堆和堆栈内存。另一方面,线程只获取堆栈并与父进程共享堆。这意味着,即使只考虑内存分配,创建一个进程比线程更昂贵,


子流程只是由另一个流程创建的流程。它们在其他方面是独立的,并且有自己的内存空间。以下是。

这个问题的答案可能非常依赖于操作系统,但有一条一般规则:

  • 进程的线程与其父进程位于同一虚拟内存空间中。因此,线程创建比进程创建便宜,因为底层操作系统不需要创建完整的虚拟内存空间

  • 子进程只是父进程派生的另一个进程


  • 但是子进程不共享父进程的内存吗?好吧,那么唯一的主要成本就是内存分配?@user559142:“子进程”这个术语有点误导。它只是一个进程,有自己的堆栈和堆内存,可能还有线程。子流程是一个流程,周期。就“主要成本”而言:内存分配是最大的区别,但还有其他特定于操作系统的区别。@Paul进程的可执行代码通常复制到子线程中吗?这不也是共享的吗,进程通常会创建可执行代码的新副本吗?@sanjacinto:不完全是。线程获得自己的执行堆栈。它可以在运行时使用/共享其进程的代码,但不会提前复制任何内容。如果子进程与父进程重复,它是否共享相同的虚拟内存空间?子进程只是位于其自身空间中的另一个进程。:)