【问题标题】:Why are threads referred to as light weight processes? [duplicate]为什么线程被称为轻量级进程? [复制]
【发布时间】:2014-10-05 08:09:13
【问题描述】:

在浏览大多数 Java 教程时,他们都提到线程是轻量级进程。我知道线程创建中发生了什么,但我没有得到线程的定义。在stackoverflow中大部分时间也回答了这个问题。但这也让我感到困惑。无法理解“轻量级过程”背后的真正想法。谁能以最简单的方式解释“线程是轻量级进程”的含义?

【问题讨论】:

  • @PaRiMaLRaJ 我看​​到了。但这并没有给我明确的想法。线不能有更多的重量吗?线程不能有很多进程要完成吗?完成大量任务是否意味着大重量过程?这个答案没有解决我的问题。

标签: java multithreading lightweight-processes


【解决方案1】:

一个进程有不同的内存区域。根据操作系统,有些可能是分组的、不存在的,甚至是子拆分的:

  • 代码
  • 内存(用于变量)
  • 堆栈
  • 堆(用于动态分配)

当您创建一个新进程时,系统必须分配所有这些。对于一个线程,只分配一个新的栈,内存的head是同一个进程的所有线程共有的。

【讨论】:

    【解决方案2】:

    您可能会这样称呼它,因为线程与进程一样,是一种具有并行、并发执行流程的方式。但与进程相反,一个线程与同一进程中的其他线程共享相同的内存,而不是拥有完全独立的内存。

    【讨论】:

    • 好的,亲爱的。共享内存意味着我认为其他线程也可以访问该内存。但为什么我们说“轻量级”?线不能有高/大重量吗?线程不能做很繁重的过程吗?
    • @Maduri 在这种情况下的轻量级意味着与单独的进程相比,创建线程或在线程之间切换执行所涉及的开销通常要少得多。两种情况下的确切开销在很大程度上取决于操作系统。
    • @ThomasStets 我认为你在一定程度上解决了我的问题。非常感谢亲爱的。 “创建线程或在线程之间切换执行”这意味着轻量级并不意味着线程必须完成的任务数量。我正确吗?轻量级意味着切换或执行之间的负载?另一个问题是,如果该线程有很多任务,那么执行如何变得高效/轻量级?
    • @Maduri 它实际上意味着操作系统可以创建线程比创建进程快得多,并且它可以在线程之间切换比进程之间更快。这意味着,您的程序逻辑需要更多的 CPU 时间。
    • @ThomasStets 非常感谢。我明白了:)。你解决了我的大问题。祝你有美好的一天:) .
    【解决方案3】:

    我猜想这种解释源于父进程生成的线程使用内存中相同的地址空间这一事实。另一方面,每个进程都有自己的地址空间。基于这一事实,进程的上下文切换比线程的上下文切换要重得多。

    【讨论】:

      猜你喜欢
      • 2011-01-17
      • 1970-01-01
      • 2020-12-22
      • 2012-03-05
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      • 2018-12-27
      相关资源
      最近更新 更多