c - 线程创建和子进程创建的系统调用有什么区别

标签 c multithreading unix process

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

最佳答案

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

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

关于c - 线程创建和子进程创建的系统调用有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11243173/

相关文章:

c - 为什么 MSVC Debug模式会为一个空的 if() 主体而不是另一个(i++ vs.++i)省略 cmp/jcc?

c - 每种情况下 'x' 的值是多少?

Java并发线程错误

java - 在继续之前等待线程完成

c# - 将pdf页面转换成1000张以上的图片

bash - 剪切变量定界符 - Bash

c++ - 在每 t 毫秒执行一次 c++ 代码时执行测量

c - 创建 makefile 时将依赖文件放置在子目录中

linux - 使用 'ls' 与选项和文件夹并获取完整路径

bash - 在 unix 中创建一个串联文件,然后在同一个脚本中将该文件邮寄给大家