0

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

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

总是这样吗?

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

谢谢

4

2 回答 2

4

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

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

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

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

调度程序可以:

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

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

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

于 2012-06-08T01:44:20.253 回答
1

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

于 2012-06-08T01:45:25.057 回答