- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在我阅读的手册页中,popen、system 等似乎倾向于调用 fork()。反过来,fork() 复制进程的整个内存状态。这看起来真的很繁重,尤其是在许多情况下,调用 fork() 的子进程几乎没有使用分配给父进程的内存。
所以,我的问题是,我能否在不复制父进程的整个内存状态的情况下获得类似 fork() 的行为?还是我遗漏了什么,例如 fork() 并不像它看起来那么重(比如,可能倾向于优化调用以避免不必要的内存重复)?
最佳答案
fork(2)是,因为所有syscalls ,从用户空间应用程序的角度来看,一个原始操作(但一些 C 库使用 clone(2) 来表示它)。它主要是一条机器指令 SYSCALL
或 SYSENTER
从用户模式切换到内核模式,然后(最新版本的)Linux 内核正在做相当重要的处理。
它实际上非常有效(例如不到一毫秒,有时甚至不到十分之一)因为内核广泛使用惰性 copy-on-write在父进程和子进程之间共享页面的技术。实际复制将在稍后发生,时间为 page faults。 , 覆盖共享页面时。
和forking有一个巨大的优势,因为一些其他程序的启动被委托(delegate)给 execve(2) :概念上很简单:父进程和子进程之间的唯一区别是 fork
顺便说一句,在 Linux 等 POSIX 系统上,fork(2)或合适的clone(2) equivalent 是创建进程的唯一方法(有一些您通常应该忽略的奇怪异常:内核正在创建一些进程,例如/sbin/init
等。 .), 自 vfork(2)已经过时了。
关于c - POSIX C 中 fork() 的重量更轻的替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33246917/
我的页面包含一个带有 5 个选项卡的 tabcontainer。每个选项卡都包含多个 RadGrid,因为 RadGrid 比 ASP.NET gridview 重。我的页面滞后,即运行速度非常慢。我
我有一个 extjs >4 应用程序,它使用选项卡面板作为菜单。每个选项卡下都有内容(包括容器等的 View )。 我注意到 extjs 可以正确处理 DOM,并且不会渲染我的应用程序拥有的所有内容。
这个问题在这里已经有了答案: PyCharm running way slow (10 个答案) 关闭去年。 我非常喜欢 PyCharm 的想法并且很乐意使用它。但是,它容易消耗计算机的处理能力和滞
我有内核函数,它必须将从 pixelBuffer(ARFrame.capturedImage) 创建的 Y 和 CbCr 纹理转换为 RGB 纹理,就像在苹果指南中一样 https://develop
我问这个问题是因为我和我的同事对编码风格有争议,因为他更喜欢箭头函数声明: const sum = (a, b) => a + b; 我更喜欢旧式的独立函数声明: function sum(a, b)
有没有一种方法可以“更轻量”地使用 globalCompositeOperation,同时使用 source-atop? (又名打火机,但仅限于已经绘制了一些东西的地方。) 最佳答案 一次只能设置一项
我正在为企业网站寻找轻型文本富编辑器,比 tinymce 更轻,带有用于评论表单的基本按钮。重要的是编辑器也可以在 IE6 中工作。直到现在我都在尝试 cleditor 15KB,但是当按“输入”键时
我问这个问题是因为我和我的同事在编码风格上存在争议,因为他更喜欢箭头函数声明: const sum = (a, b) => a + b; 而且我更喜欢老式的独立函数声明: function sum(a
我想知道该代码是否: select(fd,..., NULL); 比那个消耗更少的CPU: struct timeval tv; tv.tv_sec = X; tv_tv_usec = Y; sele
我是一名优秀的程序员,十分优秀!