我阅读了关于进程 vs 线程的文章,但仍然不清楚它们之间的区别。
假设一个进程正在使用 CPU/处理器进行一些需要 10 分钟的大量计算。在单核和双核处理器中,另一个进程如何同时运行?
对于线程,当 CPU/处理器正忙于另一个线程时,另一个线程会如何并行运行?
线程上下文切换与进程上下文切换有何不同?我的意思是,进程和线程都使用同一块 RAM 内存,那么它们之间有何差异?
我阅读了关于进程 vs 线程的文章,但仍然不清楚它们之间的区别。
假设一个进程正在使用 CPU/处理器进行一些需要 10 分钟的大量计算。在单核和双核处理器中,另一个进程如何同时运行?
对于线程,当 CPU/处理器正忙于另一个线程时,另一个线程会如何并行运行?
线程上下文切换与进程上下文切换有何不同?我的意思是,进程和线程都使用同一块 RAM 内存,那么它们之间有何差异?
从我对操作系统的模糊记忆中,我可以为您提供一点帮助。 首先,您必须知道并发和同时发生的区别。 它们不是同一件事; 同时发生意味着两个事情同时发生,而并发则意味着它们似乎在同时运行,但实际上它们轮流运行得非常快,你无法分辨。
进程和线程可以认为类似,但一个大的区别是,进程比线程更大。因此,在进程之间进行切换是不好的。 在进程中有太多信息需要保存和重新加载,每次CPU决定切换进程时都会涉及到这些信息。
另一方面,线程较小,因此更适合进行切换。 一个进程可能有多个线程同时运行,这意味着它们不是在完全相同的时间运行,但是在一起运行并且在它们之间进行切换。 线程的上下文切换更好,因为线程需要存储/重新加载的信息不会那么多。
如果只有一个内核,则通常只能进行并发执行。 一旦您拥有多个内核,就可以在两个内核上运行线程,从而实现同时执行。 操作系统决定线程何时运行,进程何时运行,何时切换以及如何切换等。 操作系统给您提供了工作同时进行的幻觉,但并非总是如此。
如果您还有疑问,请随时发表评论。
进程是与操作系统(OS)密切相关的东西。线程在最简单的术语中是一个正在执行的程序。一个或多个线程在进程的上下文中运行。Java虚拟机(JVM)是您OS中的一个进程。
并且在JVM内部,您可以同时运行多个线程。
处理器是您计算机的资源,就像内存一样。您的操作系统允许您的进程共享可用资源,在我们简单的情况下是处理器和内存。
当您使用Java进行开发时,您计算机中的所有处理器都是可用资源。
当您开发解决方案时,您甚至可以有多个Java进程(即多个JVM),每个进程运行一个或多个线程。但这主要取决于您的问题。
进程和线程之间的真正区别在于它们都具有执行程序,但线程共享同一内存。这使得您的线程理论上能够在同一数据上工作,但您必须承担并发和同步的复杂性。
每个CPU一次只能运行一个进程中的一个线程。然而,操作系统可以快速停止和保存一个线程,并加载和运行另一个线程(仅需0.0001秒)。这给人一种假象,即许多线程正在同时运行,尽管实际上只有一个在运行。