“fork”在java中是否始终表示并行?

时间:2012-06-08 01:07:25

标签: java parallel-processing terminology

我是java世界的新手。有些名字听起来很有趣。

其中一个是叉子...我想叉子的食物意味着平行。

总是这样吗?

例如:如果我看到一个名为pid forkAndExec(String... commands)的函数,我可以假设它将始终并行运行。

谢谢

2 个答案:

答案 0 :(得分:4)

“分叉”流程通常意味着您将创建当前流程的新碳复制品。有一段时间,该术语被滥用意味着创建一个新的不同子进程。到目前为止一切都很好。

但是,并不保证“并行”假设。它实际上并不依赖于Java,而是依赖于它运行的平台,意味着硬件和操作系统层。

你可以安全地假设(我会),分叉功能确实会创建一个新的过程。但是:

  • 该流程在后台实际创建的方式直至JVM的实施;
  • 该流程如何托管运行 直至操作系统(或更确切地说,内核的调度程序);
  • 调度程序是否可以实际实现并发性 是否符合硬件规范。

调度程序可以:

  • 决定玩得很好,并为多个核心或真实处理器提供真正的并行化,
  • 或者它可能会使用时间片给你一种并发的错觉,
  • 或者它可能对你有意义并决定你的进程会排队,只是因为它不喜欢你(最后一种情况不太可能,或者你自己是一个相当卑鄙的内核,你应该申请离婚)

此外,您的程序需要以不妨碍您所说的并行化的方式实现(例如,如果父进程设置为无限期地等待子进程执行,这几乎不意味着它们并发运行......一个人只是在等待另一个赶上来。)

另外,你提到了forkAndExec。要小心,因为很容易混淆这些。许多语言中的某些函数将分叉一个新进程并用它替换现有进程,而其他函数将创建两个进程并尝试并行运行它们。

答案 1 :(得分:1)

您似乎对编程世界不熟悉。那里的许多成语都是从英语中借用那些完全不同于其他东西的东西。虽然这些通常都是隐喻,但与fork一样,通常不可能从编程世界的含义中推断出编程世界中的含义。如果您在Wikipedia上查找,则必须转到disambiguation并查看计算上下文。在那里你会找到method of creating processes