gpt4 book ai didi

java - "fork"在java中总是意味着并行吗?

转载 作者:行者123 更新时间:2023-12-01 17:30:59 24 4
gpt4 key购买 nike

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

其中之一是 fork ...我猜 fork 代表食物意味着平行。

总是这样吗?

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

谢谢

最佳答案

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

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

您可以放心地假设(我会) fork 函数确实会创建一个新进程。但是:

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

调度程序可以:

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

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

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

关于java - "fork"在java中总是意味着并行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10941902/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com