使用示例处理vs线程

时间:2017-01-31 16:40:36

标签: multithreading process cpu

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

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

对于线程来说,当CPU /处理器与另一个线程接合时,另一个线程如何并行运行?

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

3 个答案:

答案 0 :(得分:2)

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

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

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

如果您只有一个核心,那么大多数情况下您只能执行并发执行。一旦拥有多个内核,就可以在两个内核上运行线程,从而实现同步执行。操作系统可以自定义线程何时运行,进程何时运行,何时进行切换,如何切换等等。操作系统会让您觉得工作正在同时进行,但并非总是如此。 。

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

答案 1 :(得分:1)

进程与操作系统(OS)非常相关。线程是最简单的,是一个执行程序。一个或多个线程在进程的上下文中运行。 Java虚拟机(JVM)是​​您的操作系统中的一个过程。

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

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

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

开发解决方案时,甚至可以使用多个Java进程(即多个JVM)运行单个或多个线程。但这主要取决于你的问题。

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

答案 2 :(得分:0)

每个CPU一次只运行一个进程中的一个线程。但是,操作系统可以停止并保存一个线程并加载并快速运行另一个线程(只需0.0001秒)这就会产生许多线程同时运行的错觉,即使只有一个正在运行。