我的应用程序使用fork系统调用每隔几百毫秒进行一次检查点。但是,当使用检查点(分叉)时,我注意到我的应用程序明显变慢。我测试了fork调用所需的时间,结果为1至2毫秒。那么为什么fork会使我的应用程序变得如此缓慢呢?请注意,我只保留一个检查点(分叉进程),并在获取新检查点时杀死先前的检查点。此外,我的计算机具有巨大的内存。
请注意,我的分叉进程创建后只是休眠。只有在需要回滚时才被唤醒。因此,它不应该由操作系统调度。我想到的一件事是,由于fork是一种写时复制机制,每当我的应用程序修改页面时就会发生页面错误。但这是否会显著减慢应用程序的速度?没有检查点(分叉),我的应用程序大约在3.1秒内完成,而使用检查点后,需要大约3.7秒。您有什么想法,是什么导致了我的应用程序变慢?
请注意,我的分叉进程创建后只是休眠。只有在需要回滚时才被唤醒。因此,它不应该由操作系统调度。我想到的一件事是,由于fork是一种写时复制机制,每当我的应用程序修改页面时就会发生页面错误。但这是否会显著减慢应用程序的速度?没有检查点(分叉),我的应用程序大约在3.1秒内完成,而使用检查点后,需要大约3.7秒。您有什么想法,是什么导致了我的应用程序变慢?
fork
更轻量级的东西)。 - zwol