sri*_*hhs 33 fork pthreads linux-kernel
pthread和fork wrt linux在实现差异以及调度如何变化(它是否变化?)方面的基本区别是什么?
我在两个类似的程序上运行strace,一个使用pthreads而另一个使用fork,最后make clone()syscall都有不同的参数,所以我猜这两个在linux系统上基本相同,但是pthreads更容易处理在代码中.
有人可以给出深刻的解释吗?
编辑:另见相关问题
Gab*_*air 61
然而,在C中存在一些差异:
叉子()
目的是创建一个新进程,该进程成为调用者的子进程
两个进程都将执行fork()系统调用之后的下一条指令
为父母和孩子创建一个计算机地址空间,代码和堆栈的两个相同副本.
想到叉子,因为它是一个人; 分叉会导致程序(进程)的克隆,即运行它复制的代码.
在pthread_create()
目的是在程序中创建一个新线程,该线程被赋予调用者相同的进程
同一进程中的线程可以使用共享内存进行通信.(小心!)
第二个线程将共享数据,打开文件,信号处理程序和信号处理,当前工作目录,用户和组ID.新线程将获得自己的堆栈,线程ID和寄存器.
继续比喻; 你的程序(进程)在创建一个连接到同一个大脑的新线程时会增长第二个臂.
在Linux上,系统调用clone克隆任务,具有可配置的共享级别.
fork()来电clone(least sharing)和pthread_create()来电clone(most sharing).因为复制表并为内存创建COW映射,分叉成本比pthread_create稍微多一点.