进程与线程的区别及示例

3

我阅读了关于进程 vs 线程的文章,但仍然不清楚它们之间的区别。

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

对于线程,当 CPU/处理器正忙于另一个线程时,另一个线程会如何并行运行?

线程上下文切换与进程上下文切换有何不同?我的意思是,进程和线程都使用同一块 RAM 内存,那么它们之间有何差异?


为什么在标签中使用Java? - Zefick
我是Java开发者!从入门开始! - rockey 123
3个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
9

从我对操作系统的模糊记忆中,我可以为您提供一点帮助。 首先,您必须知道并发和同时发生的区别。 它们不是同一件事; 同时发生意味着两个事情同时发生,而并发则意味着它们似乎在同时运行,但实际上它们轮流运行得非常快,你无法分辨。

进程和线程可以认为类似,但一个大的区别是,进程比线程更大。因此,在进程之间进行切换是不好的。 在进程中有太多信息需要保存和重新加载,每次CPU决定切换进程时都会涉及到这些信息。

另一方面,线程较小,因此更适合进行切换。 一个进程可能有多个线程同时运行,这意味着它们不是在完全相同的时间运行,但是在一起运行并且在它们之间进行切换。 线程的上下文切换更好,因为线程需要存储/重新加载的信息不会那么多。

如果只有一个内核,则通常只能进行并发执行。 一旦您拥有多个内核,就可以在两个内核上运行线程,从而实现同时执行。 操作系统决定线程何时运行,进程何时运行,何时切换以及如何切换等。 操作系统给您提供了工作同时进行的幻觉,但并非总是如此。

如果您还有疑问,请随时发表评论。


太好了!假设我在双核处理器上运行Tomcat服务器中的Java应用程序,那么对应用程序的每个请求都是一个单独的线程,因此根据上述情况,只有两个线程同时运行,也就是说只有两个请求同时被服务? - rockey 123
是的,如果你有双核处理器,只能同时处理两个“请求”。虽然我不熟悉Tomcat服务器,所以不能百分之百确定,我只是一个贫穷的大学生。如果它与网络有关,则可能会发生其他机制。 - Developer
在线程上下文中,“reload”是什么意思? - Mohammed Shahed

2

进程是与操作系统(OS)密切相关的东西。线程在最简单的术语中是一个正在执行的程序。一个或多个线程在进程的上下文中运行。Java虚拟机(JVM)是您OS中的一个进程。

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

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

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

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

进程和线程之间的真正区别在于它们都具有执行程序,但线程共享同一内存。这使得您的线程理论上能够在同一数据上工作,但您必须承担并发和同步的复杂性。


0

每个CPU一次只能运行一个进程中的一个线程。然而,操作系统可以快速停止和保存一个线程,并加载和运行另一个线程(仅需0.0001秒)。这给人一种假象,即许多线程正在同时运行,尽管实际上只有一个在运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,