gpt4 book ai didi

linux-kernel - gnu/Linux 上 pthread 和 fork 的区别

转载 作者:行者123 更新时间:2023-12-03 08:34:51 30 4
gpt4 key购买 nike

pthread 和 fork w.r.t. 之间的基本区别是什么?在 linux 方面
实现差异以及调度如何变化(是否有所不同?)

我在两个类似的程序上运行了 strace,一个使用 pthreads,另一个使用 fork,
最后都使用不同的参数使 clone() 系统调用,所以我猜
两者在 linux 系统上基本相同,但 pthreads 更容易
在代码中处理。

有人可以给一个深刻的解释吗?

编辑:另见相关 question

最佳答案

然而,在 C 中存在一些差异:

叉()

  • 目的是创建一个新进程,成为调用者的子进程
  • 两个进程都将执行 fork() 系统调用后的下一条指令
  • 计算机地址空间、代码和堆栈的两个完全相同的副本分别为父和子创建。

  • 把 fork 想成一个人; fork 会导致您的程序(进程)的克隆,即运行它复制的代码。

    pthread_create()
  • 目的是在程序中创建一个新线程,该线程被赋予与调用者相同的进程
  • 同一进程内的线程可以使用共享内存进行通信。 (小心!)
  • 第二个线程将共享数据、打开的文件、信号处理程序和信号处置、当前工作目录、用户和组 ID。新线程将获得自己的堆栈、线程 ID 和寄存器。

  • 继续类比;当你的程序(进程)创建一个连接到同一个大脑的新线程时,它会增长第二条 ARM 。

    关于linux-kernel - gnu/Linux 上 pthread 和 fork 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5514464/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com