我最近在使用fork
函数进行了一些实验,我对一个"简单" (简称)问题:
fork
是否使用并发或并行(如果有多个核心)机制?感谢您的回答。
nb:该死的我再次轰炸自己!
答案 0 :(得分:3)
fork()
复制当前流程,创建另一个独立流程。故事结束。
内核如何选择安排这些过程是一个不同的,非常广泛的问题。通常,内核将尝试使用所有可用资源(核心)来运行尽可能多的任务。如果有多个可运行的任务而不是核心,它必须开始决定谁来运行,以及运行多长时间。
答案 1 :(得分:2)
fork函数创建一个单独的进程。它取决于操作系统如何处理不同的进程。
当然,如果只有一个核心可用,那么操作系统别无选择,只能运行所有进程 interleaved 。
如果有更多核心可用,每个理智的操作系统都会将进程分配到不同的核心,因此每个核心至少运行一个进程。 但是,即便如此,与核心相比,更多的进程可以处于活动状态。因此,即使这样,操作系统也可以决定哪些进程可以并行运行(通过分配到核心),哪些进程必须交错运行(在单核上)。
答案 2 :(得分:1)
实际上,fork()是一个系统调用(又称系统服务),它从当前进程创建一个新进程(读取返回代码以查看您是谁,父进程还是子进程)。
在UNIX工作中,进程共享CPU计算时间。这就是这样的:
当存在多个处理器核心时,内核可以在它们上分配进程。
答案 3 :(得分:0)
嗯,你可以做点什么。写一个复杂的程序,比如O(n ^ 3),这样就需要花费大量的时间来计算。 fork()四次(如果你有四核)。现在打开任何图形CPU监视器。什么酷?