为什么分叉会减慢我的申请速度

为什么分叉会减慢我的申请速度,第1张

概述我的应用程序通过使用fork系统调用每隔几百毫秒获取一个检查点.但是,我注意到使用检查点(分叉)时我的​​应用程序显着减慢.我测试了fork调用所花费的时间,结果是1到2毫秒.那么为什么fork会大大减慢我的应用程序.请注意,我一次只保留1个检查点(分叉进程),并且每当我拿一个新检查点时都会终止前一个检查点.另外,我的电脑有一个巨大的RAM. 请注意,我的分叉进程在创建后就会休眠.只有在需要进行回 我的应用程序通过使用fork系统调用每隔几百毫秒获取一个检查点.但是,我注意到使用检查点(分叉)时我的​​应用程序显着减慢.我测试了fork调用所花费的时间,结果是1到2毫秒.那么为什么fork会大大减慢我的应用程序.请注意,我一次只保留1个检查点(分叉进程),并且每当我拿一个新检查点时都会终止前一个检查点.另外,我的电脑有一个巨大的RAM.

请注意,我的分叉进程在创建后就会休眠.只有在需要进行回滚时才会被唤醒.因此,它不应由 *** 作系统安排.我想到的一件事是,由于fork是一种写时复制机制,每当我的应用程序修改页面时都会出现页面错误.但是,这应该显着减缓应用程序的速度吗如果没有检查点(分叉),我的应用程序将在大约3.1秒内完成,使用它大约需要3.7秒.有什么想法,什么减慢了我的申请?

解决方法 正如您所假设的那样,您可能正在观察写时复制机制的成本.这实际上非常昂贵 – 这也是vfork仍然存在的原因. (主要成本不是额外的页面错误本身,而是触及的每个页面的memcpy,以及相关的缓存和TLB刷新.)它没有显示为fork的成本,因为页面错误不会发生在内部系统调用.

您可以通过查看getrusage报告的时间来确认假设 – 如果这是正确的,则额外的时间应该几乎都是“系统”时间(内核中的cpu烧毁). oprofile或perf会让你更具体地解决这个问题…如果你可以让它们完全工作,这是非常重要的,唉.

不幸的是,写时复制也是您的检查点机制首先工作的原因.您能否以较长的间隔离开检查站?这是我能想到的唯一快速解决方案.

总结

以上是内存溢出为你收集整理的为什么分叉会减慢我的申请速度全部内容,希望文章能够帮你解决为什么分叉会减慢我的申请速度所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1021411.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存