gpt4 book ai didi

linux - fork 与线程

转载 作者:IT老高 更新时间:2023-10-28 12:32:44 26 4
gpt4 key购买 nike

我以前在我的应用程序中使用过线程并且非常了解它的概念,但是最近在我的操作系统讲座中我遇到了 fork()。这类似于线程。

我用谷歌搜索了它们之间的区别,我知道了:

  1. Fork 只不过是一个新进程,看起来与旧进程或父进程一模一样,但它仍然是一个不同的进程,具有不同的进程 ID 并拥有自己的内存。
  2. 线程是开销较小的轻量级进程

但是,我心中仍有一些疑问。

  1. 什么时候你应该更喜欢 fork() 而不是线程,反之亦然?
  2. 如果我想在小时候调用外部应用程序,那么我应该使用 fork() 还是线程来做呢?
  3. 在进行谷歌搜索时,我发现有人说在线程中调用 fork() 是一件坏事。为什么人们在做类似的事情时要在线程内调用 fork()?
  4. 因为父进程和子进程不同时运行,fork() 不能利用多处理器系统是真的吗?

最佳答案

fork 和线程方法的主要区别在于操作系统架构之一。早在 Unix 设计的时候,fork 是一个简单的系统,可以最好地满足大型机和服务器类型的要求,因此它在 Unix 系统上得到了普及。当微软从头开始重新构建 NT 内核时,它更多地关注线程模型。因此,今天仍然存在显着差异,Unix 系统在 fork 上的效率更高,而 Windows 在线程上的效率更高。您可以在 Apache 中最明显地看到这一点,它在 Unix 上使用 prefork 策略,在 Windows 上使用线程池。

特别针对您的问题:

When should you prefer fork() over threading and vice-verse?

在 Unix 系统上,您要执行的任务远比仅仅实例化一个 worker 复杂得多,或者您想要单独进程的隐式安全沙盒。

If I want to call an external application as a child, then should I use fork() or threads to do it?

如果 child 将使用相同的代码执行与 parent 相同的任务,请使用 fork。对于较小的子任务,使用线程。对于单独的外部进程,两者都不使用,只需使用适当的 API 调用来调用它们。

While doing google search I found people saying it is bad thing to call a fork() inside a thread. why do people want to call a fork() inside a thread when they do similar things?

不完全确定,但我认为复制一个进程和大量子线程在计算上相当昂贵。

Is it True that fork() cannot take advantage of multiprocessor system because parent and child process don't run simultaneously?

这是错误的,fork 会创建一个新进程,然后该进程会利用操作系统任务调度程序中进程可用的所有功能。

关于linux - fork 与线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16354460/

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