首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程创建和子进程创建中的系统调用有什么不同

线程创建和子进程创建中的系统调用有什么不同
EN

Stack Overflow用户
提问于 2012-06-28 19:00:14
回答 4查看 901关注 0票数 0

在系统中线程的实现是如何完成的?我知道子进程是使用fork()调用创建的,而线程是轻量级的。线程的创建与子进程的创建有什么不同?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-28 19:10:34

线程是使用clone()系统调用创建的,该系统调用可以创建一个新进程,该进程与其父进程共享内存空间和一些内核控制结构。这些进程称为LWP(轻量级进程),也称为内核级线程。

fork()创建了一个新进程,该进程最初与其父进程共享内存,但页面是写时复制的,这意味着当原始内存页面的内容发生更改时,会创建单独的内存页面。因此,父进程和子进程都不能再改变彼此的内存,它们实际上是作为单独的进程运行的。此外,新派生的子进程是一个成熟的进程,具有独立的内核控制结构。

票数 2
EN

Stack Overflow用户

发布于 2012-06-28 19:04:55

每个进程都有自己的地址空间,也就是进程可以访问的虚拟地址范围。当派生新进程时,必须复制所有涉及到的资源。在派生完成之后,子进程和父进程都有自己不同的地址空间和it.Naturally中涉及的所有资源,这是一个性能密集型操作。

虽然同一进程中的所有线程共享相同的地址空间,因此当产生新线程时,每个线程只需要自己的堆栈,并且不存在所有资源的重复,因为在processes.Hence产生线程的情况下,性能密集度大大降低。

当然,这两种操作不能也不应该进行比较,因为它们都为不同的需求提供了本质上不同的功能。

票数 1
EN

Stack Overflow用户

发布于 2012-06-28 19:05:59

它有很大的不同,首先,子进程在某种程度上是父程序的副本,并且所有变量都是重复的,你可以通过它的PID来区分父进程和子进程。线程就像新程序一样,它们和主程序同时运行(由于操作系统对cpu的时间进行了分片,所以看起来是同时运行的)。线程可以在程序中使用全局变量,但它们不会复制为进程。所以使用线程比使用新进程要便宜得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11243173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档