CreateThread vs fork()

fork()和CreateThread之间有什么关系吗? 有什么CreateThread内部调用fork()?

在NT中,基本工作单元被称为线程(即NT调度线程,而不是进程)。 用户线程在进程的上下文中运行。 当你调用CreateThread的时候,你要求NT内核在你的进程的上下文中分配一个工作单元(你也有基本上是线程的纤维,你可以调度自己,但这不在你的问题的主题之内)。

当你调用CreateThread的时候,你提供了一个在函数被调用之后将要运行的入口点的函数。 代码必须在进程的虚拟空间内,并且页面必须具有执行权限。 简单地说,你给一个函数指针。 ;)

fork()是一个UNIX函数,它请求内核创建正在运行的进程的副本。 父进程得到子进程的PID,子进程得到0(这样你就知道你是谁了)。

如果你想在Windows中创建一个进程,你可以调用CreateProcess函数,但是这不像fork()。 原因是大多数时候你会创建线程,而不是进程。

正如你所看到的,CreateThread和fork之间没有关系。

fork()只在Unix系统上存在,它创建一个与调用者状态相同的新进程。 CreateThread()在同一个进程中创建一个新的线程。

CreateThread – 用于线程,fork – 用于创建重复的进程。 并没有原生的方式来为Windows(至少通过Win32)的叉功能。

Windows和Unix的进程模型基本上是非常不同的,所以没有办法从一个接一个地直接映射API。

fork()将当前进程克隆为两个。 在父进程中,fork()返回pid,在子进程中返回0.这通常是这样使用的:

 int pid; if (pid = fork()) { // this code is executed in the parent } else { // this code is executed in the child } 

Cygwin是在Windows上构建和运行Unix应用程序的仿真层,它使用CreateProcess() 模拟 fork()的行为。

您可能想知道Microsoft在Windows的高端版本中提供了fork(),其组件名为Subsystem for UNIX-based Applications (SUA)。 你可以在我的答案这里找到细节。

找到这个链接,我认为这可能有助于清除有关分叉/线程的一些事实。 在这里共享: http : //www.geekride.com/index.php/2010/01/fork-forking-vs-threading-thread-linux-kernel/