Fork:并发或并行

时间:2016-10-28 10:49:52

标签: c fork

我最近在使用fork函数进行了一些实验,我对一个"简单" (简称)问题:

  • fork是否使用并发或并行(如果有多个核心)机制?
  • 或者,它是最佳选择的操作系统吗?

感谢您的回答。

nb:该死的我再次轰炸自己!

编辑:

  1. 并发:每个操作都在一个核心上运行。接收中断以便从一个进程切换到另一个进程(顺序计算)。
  2. 并行性:每个操作都在两个核心(或更多核心)上运行。

4 个答案:

答案 0 :(得分:3)

fork()复制当前流程,创建另一个独立流程。故事结束。

内核如何选择安排这些过程是一个不同的,非常广泛的问题。通常,内核将尝试使用所有可用资源(核心)来运行尽可能多的任务。如果有多个可运行的任务而不是核心,它必须开始决定谁来运行,以及运行多长时间。

答案 1 :(得分:2)

fork函数创建一个单独的进程。它取决于操作系统如何处理不同的进程。

当然,如果只有一个核心可用,那么操作系统别无选择,只能运行所有进程 interleaved

如果有更多核心可用,每个理智的操作系统都会将进程分配到不同的核心,因此每个核心至少运行一个进程。 但是,即便如此,与核心相比,更多的进程可以处于活动状态。因此,即使这样,操作系统也可以决定哪些进程可以并行运行(通过分配到核心),哪些进程必须交错运行(在单核上)。

答案 2 :(得分:1)

实际上,fork()是一个系统调用(又称系统服务),它从当前进程创建一个新进程(读取返回代码以查看您是谁,父进程还是子进程)。

在UNIX工作中,进程共享CPU计算时间。这就是这样的:

  1. 进程正在运行
  2. 时钟生成中断,调用内核并暂停进程
  3. 内核获取可用进程列表,并决定恢复一个进程(这称为调度)
  4. 转到第1点)
  5. 当存在多个处理器核心时,内核可以在它们上分配进程。

答案 3 :(得分:0)

嗯,你可以做点什么。写一个复杂的程序,比如O(n ^ 3),这样就需要花费大量的时间来计算。 fork()四次(如果你有四核)。现在打开任何图形CPU监视器。什么酷?