微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CreateThread vs fork

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

java:停止subprocess

寻找一个进程的Linux(C代码)打开文件描述符?

W64内存映射文件和locking页面

用Python 3.5安装numpy Windows 8 64

Windows 7上的AppInit_DLLs(64位版本)

在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/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐