进程与线程示例
Process vs thread with example
我阅读了关于进程与线程的文章,但我仍然不清楚它们之间的区别。
假设一个进程正在使用 CPU/Processor,做一些需要 10 分钟的大计算。如何将另一个进程运行同时并行?在单核与双核处理器中?
线程也是如此,当CPU/Processor与另一个线程接合时,另一个线程运行如何并行?
线程和进程的上下文切换有何不同?我的意思是进程和线程都使用相同的 RAM 内存,那有什么区别?
进程与操作系统密切相关(OS)。线程用最简单的话来说,就是一个正在执行的程序。进程上下文中的一个或多个线程 运行。 Java 虚拟机 (JVM) 是您 OS 中的一个进程。
并且在 JVM 中,您可以同时拥有多个线程 运行ning。
处理器是您机器的一种资源,就像内存一样。您的 OS 让您的进程共享可用资源,在我们的简单情况下是处理器和内存。
当您在Java中开发时,您机器中的所有处理器都是可用资源。
当您开发解决方案时,您甚至可以有多个 Java 进程(即多个 JVM)运行 每个进程有一个或多个线程。但这主要取决于您的问题。
进程和线程的真正区别在于,两者都有一个正在执行的程序,但线程共享相同的内存。这让你的线程理论上可以处理相同的数据,但你已经付出了并发和同步的复杂性。
每个 CPU 一次仅 运行 一个进程中的一个线程。然而,OS 可以停止并保存一个线程并快速加载和 运行 另一个线程(仅需 0.0001 秒)这给人一种错觉,即许多线程同时 运行ning,即使只有一个是 运行ning.
根据我对操作系统的模糊记忆,我可以为您提供一点帮助。首先你要知道concurrent和simultaneous的区别。它们不是同一件事; simultaneous 意味着两件事同时发生,concurrent 意味着它们看起来 运行 同时发生,但实际上它们切换得如此之快,你无法分辨。
进程和线程可以认为是相似的,但是一个很大的区别是进程比线程大很多。因此,在进程之间切换是不好的。进程中有太多信息,每次 CPU 决定切换进程时都必须保存和重新加载。
另一方面,线程较小,因此更适合切换。一个进程可能有多个 运行 并发的线程,这意味着不是在同一时间,而是 运行 在一起并在它们之间切换。这里的上下文切换更好,因为线程不会有 store/reload.
的信息那么多
如果你只有一个核心,那么大部分情况下你只能并发执行。一旦你有多个核心,你就可以在两个核心上都有线程运行,从而同时执行。由操作系统来安排线程何时 运行、进程何时达到 运行、何时切换、如何切换等等。操作系统给你一种工作正在完成的错觉同时,当情况并非总是如此。
如果您有更多困惑,请随时发表评论。
我阅读了关于进程与线程的文章,但我仍然不清楚它们之间的区别。
假设一个进程正在使用 CPU/Processor,做一些需要 10 分钟的大计算。如何将另一个进程运行同时并行?在单核与双核处理器中?
线程也是如此,当CPU/Processor与另一个线程接合时,另一个线程运行如何并行?
线程和进程的上下文切换有何不同?我的意思是进程和线程都使用相同的 RAM 内存,那有什么区别?
进程与操作系统密切相关(OS)。线程用最简单的话来说,就是一个正在执行的程序。进程上下文中的一个或多个线程 运行。 Java 虚拟机 (JVM) 是您 OS 中的一个进程。
并且在 JVM 中,您可以同时拥有多个线程 运行ning。
处理器是您机器的一种资源,就像内存一样。您的 OS 让您的进程共享可用资源,在我们的简单情况下是处理器和内存。
当您在Java中开发时,您机器中的所有处理器都是可用资源。
当您开发解决方案时,您甚至可以有多个 Java 进程(即多个 JVM)运行 每个进程有一个或多个线程。但这主要取决于您的问题。
进程和线程的真正区别在于,两者都有一个正在执行的程序,但线程共享相同的内存。这让你的线程理论上可以处理相同的数据,但你已经付出了并发和同步的复杂性。
每个 CPU 一次仅 运行 一个进程中的一个线程。然而,OS 可以停止并保存一个线程并快速加载和 运行 另一个线程(仅需 0.0001 秒)这给人一种错觉,即许多线程同时 运行ning,即使只有一个是 运行ning.
根据我对操作系统的模糊记忆,我可以为您提供一点帮助。首先你要知道concurrent和simultaneous的区别。它们不是同一件事; simultaneous 意味着两件事同时发生,concurrent 意味着它们看起来 运行 同时发生,但实际上它们切换得如此之快,你无法分辨。
进程和线程可以认为是相似的,但是一个很大的区别是进程比线程大很多。因此,在进程之间切换是不好的。进程中有太多信息,每次 CPU 决定切换进程时都必须保存和重新加载。
另一方面,线程较小,因此更适合切换。一个进程可能有多个 运行 并发的线程,这意味着不是在同一时间,而是 运行 在一起并在它们之间切换。这里的上下文切换更好,因为线程不会有 store/reload.
的信息那么多如果你只有一个核心,那么大部分情况下你只能并发执行。一旦你有多个核心,你就可以在两个核心上都有线程运行,从而同时执行。由操作系统来安排线程何时 运行、进程何时达到 运行、何时切换、如何切换等等。操作系统给你一种工作正在完成的错觉同时,当情况并非总是如此。
如果您有更多困惑,请随时发表评论。