【问题标题】:Usefulness of fork() besides executing foreign programsfork() 除了执行外来程序的用处
【发布时间】:2012-03-30 20:22:34
【问题描述】:

我阅读的关于fork() 的教程、手册和其他资源通常只包含可以用线程更好地解决的示例。他们只是交流,做一些非常基本的任务,然后再次交流以分享或展示结果。我的感觉是,除非您打算启动一个外部程序(通过让父亲继续并让孩子启动该外部程序),否则线程总是比 fork 更容易处理、更灵活、更安全。

fork() 优于仅使用线程时,还有其他应用领域吗?除了病毒。

【问题讨论】:

  • 在一些/许多操作系统上,进程比线程便宜
  • @ildjarn - 更便宜?既然一个进程必须至少有一个线程来为其提供执行,那怎么可能呢?
  • @vsz:任何虚拟内存管理器在后台以写时复制的方式共享数百兆内存。
  • fork() 比各种线程机制早了至少十年。因此,如果您需要移植到 V7 UNIX,fork() 是一个更好的选择。
  • 一个典型的例子是网络服务器(例如,Apache)。如果一个进程崩溃了,很容易干净地重新启动——线程就不是这样了。使用单独的进程可以限制您因单个进程崩溃而受到的损害。

标签: c++ multithreading


【解决方案1】:

您可以使用fork() 作为一种简单的方法来从应用程序生成快照,而无需停止原始应用程序。

由于操作系统将进程的虚拟内存映射为写入时复制,因此您实际上无需支付任何费用,除了已更改的数据(加上操作系统开销)。

编辑:添加了来自 cmets 的答案,以供以后查看。

一个典型的例子是网络服务器(例如 Apache)。如果一个进程崩溃了,很容易干净地重新启动——线程就不是这样了。使用单独的进程可以限制您从单个进程崩溃中获得的损害。 ——杰里·科芬

fork() 比各种线程机制早了至少十年。因此,如果您需要移植到 V7 UNIX,fork() 是一个更好的选择。 – 罗布

fork() 可用于守护进程,同时保持监控进程处于活动状态。 – 马克 B

【讨论】:

  • 这除了调试还有什么用?一个非常冗长的自我诊断功能,需要花费大量时间并且不应让程序挂起?
  • @vsz,快照不仅仅用于调试。我一直使用它们,以便我可以缓存 9 小时过程的结果。
猜你喜欢
  • 2011-06-27
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 2015-04-28
  • 2013-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多