请注意,我的分叉进程在创建后就会休眠.只有在需要进行回滚时才会被唤醒.因此,它不应由 *** 作系统安排.我想到的一件事是,由于fork是一种写时复制机制,每当我的应用程序修改页面时都会出现页面错误.但是,这应该显着减缓应用程序的速度吗如果没有检查点(分叉),我的应用程序将在大约3.1秒内完成,使用它大约需要3.7秒.有什么想法,什么减慢了我的申请?
解决方法 正如您所假设的那样,您可能正在观察写时复制机制的成本.这实际上非常昂贵 – 这也是vfork仍然存在的原因. (主要成本不是额外的页面错误本身,而是触及的每个页面的memcpy,以及相关的缓存和TLB刷新.)它没有显示为fork的成本,因为页面错误不会发生在内部系统调用.您可以通过查看getrusage报告的时间来确认假设 – 如果这是正确的,则额外的时间应该几乎都是“系统”时间(内核中的cpu烧毁). oprofile或perf会让你更具体地解决这个问题…如果你可以让它们完全工作,这是非常重要的,唉.
不幸的是,写时复制也是您的检查点机制首先工作的原因.您能否以较长的间隔离开检查站?这是我能想到的唯一快速解决方案.
总结以上是内存溢出为你收集整理的为什么分叉会减慢我的申请速度全部内容,希望文章能够帮你解决为什么分叉会减慢我的申请速度所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)