为什么创建线程比创建进程更快?

时间:2011-02-14 11:55:17

标签: multithreading process execution-time

这只是因为他们只需要一个堆栈和寄存器来存储寄存器,因此创建起来便宜吗?

线程是否可以共享公共数据,即它们不需要在这里使用进程间通信这一因素?这是否会减少对保护的需求?

或者线程是否比流程更好地利用多处理器?

4 个答案:

答案 0 :(得分:4)

谁说的是?在某些操作系统上,差别不大。您是否在考虑Windows的哪些线程比进程重量轻得多?

我怀疑你会通过咨询Stack Overflow question来了解更多信息。

答案 1 :(得分:1)

从Windows的角度来看,如果进程加载了很多DLL,并且由于基地址冲突而在内存中移动它们,则 可能需要更长时间才能创建。然后查看David Heffernan回答链接中列出的所有其他原因。

答案 2 :(得分:1)

如果我们谈到重量级线程(例如Windows线程),一个进程有线程,它至少有一个线程(主线程),所以显然它更重或至少不轻:-)(总和总是> = =部分)

进程必须具有许多“表”(打开文件表,显示内存映射方式的表(LDT,本地描述符表)......)。如果创建进程,则必须初始化所有这些表。如果你创建一个线程,他们不会(因为线程使用其进程)。然后一个新进程必须再次加载所有DLL,检查它们是否重新映射...

答案 3 :(得分:0)

过程切换需要更改CS / DS寄存器。改变这些寄存器的值需要从全局描述符表中获取新的描述符,这在CPU时间方面实际上是昂贵的过程。