【问题标题】:Process vs thread with example进程与线程示例
【发布时间】:2017-01-31 16:40:36
【问题描述】:

我阅读了有关进程与线程的文章,但我仍然不清楚它们的区别。

假设一个进程正在使用 CPU/处理器,做一些需要 10 分钟的大计算。另一个进程如何同时并行运行?单核处理器还是双核处理器?

线程也是如此,当 CPU/Processor 与另一个线程接合时,另一个线程如何并行运行?

线程和进程的上下文切换有何不同?我的意思是进程和线程都使用相同的RAM内存,那么有什么区别?

【问题讨论】:

  • 为什么在标签中使用 java?
  • 我是 Java 开发者!初学者到!

标签: multithreading process cpu


【解决方案1】:

根据我对操作系统的模糊记忆,我可以为您提供一点帮助。首先,您必须知道并发和同时之间的区别。它们不是同一件事;同时意味着两件事同时发生,并发意味着它们似乎同时运行,但实际上它们切换得如此之快,以至于你无法判断。

进程和线程可以认为是相似的,但一个很大的区别是进程比线程大得多。因此,在进程之间切换是不好的。每次 CPU 决定切换进程时,必须保存并重新加载进程中的信息太多。

另一方面,线程更小,因此更适合切换。一个进程可能有多个并发运行的线程,这意味着不是在同一确切时间,而是一起运行并在它们之间切换。这里的上下文切换更好,因为线程不会有太多的信息来存储/重新加载。

如果您只有一个核心,那么您在大多数情况下只能进行并发执行。一旦你有多个核心,你就可以在两个核心上运行线程,从而同时执行。由操作系统来安排线程何时运行、进程何时运行、何时切换、如何切换它们等。操作系统会给你一种错觉,即工作正在同时完成,但情况并非总是如此.

如果您有更多困惑,请随时发表评论。

【讨论】:

  • 太棒了!所以假设我在双核处理器上的 tomcat 服务器中运行 java 应用程序,所以对应用程序的每个请求都是一个线程,因此根据上面只有两个线程同时运行,我的意思是只有两个请求同时服务?
  • 是的,如果您有双核,则只能同时处理两个“请求”。虽然我不熟悉Tomcat服务器所以我不能百分百确定,我只是一个贫穷的大学生。如果它与网络有关,那么可能会发生其他一些机制。
【解决方案2】:

进程是与操作系统 (OS) 密切相关的事物。线程用最简单的话说,就是一个正在执行的程序。一个或多个线程在进程的上下文中运行。 Java 虚拟机 (JVM) 是您的操作系统中的一个进程。

在 JVM 内部,您可以同时运行多个线程。

处理器是您机器的资源,就像内存一样。您的操作系统允许您的进程共享可用资源,在我们的简单案例中是处理器和内存。

当您使用 Java 进行开发时,您机器中的所有处理器都是可用资源。

当您开发解决方案时,您甚至可以让多个 Java 进程(即多个 JVM)各自运行一个或多个线程。但这主要取决于您的问题。

进程和线程之间的真正区别在于两者都有一个正在执行的程序,但线程共享相同的内存。这让您的线程理论上可以处理相同的数据,但是您已经付出了并发和同步的复杂性。

【讨论】:

    【解决方案3】:

    每个 CPU 一次只在一个进程中运行一个线程。然而,操作系统可以快速停止和保存一个线程并加载和运行另一个线程(只需 0.0001 秒),这给人一种错觉,即许多线程同时运行,即使只有一个在运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-04
      • 2021-12-25
      • 2020-09-20
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多