【问题标题】:Does "fork" always mean parallel in java?“fork”在java中总是意味着并行吗?
【发布时间】:2026-01-29 14:55:01
【问题描述】:

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

其中一个是叉子……我想叉子代表食物是平行的。

总是这样吗?

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

谢谢

【问题讨论】:

  • fork - 表示分成两个或多个执行流。它们何时物理并行执行取决于硬件。您可以通过搜索自行找到。
  • 这是一个岔路口,不是吃叉子。
  • @edthethird:您认为“岔路口”的用法从何而来?

标签: java parallel-processing terminology


【解决方案1】:

“分叉”流程通常意味着您将创建当前流程的新副本。有时,该术语被滥用来表示创建新的不同子进程。到目前为止一切顺利。

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

您可以放心地假设(我愿意)分叉函数确实会创建一个新进程。然而:

  • 如何在后台实际创建该进程取决于 JVM 的实现
  • 该进程如何管理运行取决于操作系统(或者更准确地说,取决于内核的调度程序);
  • 调度程序是否可以真正实现并发取决于硬件规范。

调度器可以:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】: