我读过关于进程和线程的文章,但是我仍然不清楚其中的区别。
假设一个进程正在使用CPU/处理器,做一些花费10分钟的大计算。另一个进程将如何同时并行运行?在单核和双核处理器上?
对于线程来说,当CPU/处理器与另一个线程打交道时,另一个线程将如何并行运行?
对于线程和进程,上下文切换有何不同?我的意思是进程和线程都使用相同的RAM内存,那么有什么区别呢?
发布于 2017-01-31 16:49:37
从我对操作系统的模糊记忆中,我可以为你提供一点帮助。首先,你必须知道并发和同时的区别。它们不是一回事;同时意味着两者同时发生,同时意味着它们似乎在同时运行,但在现实中,它们切换得太快了,你看不出来。
进程和线程可以被认为是相似的,但是一个很大的区别是进程比线程要大得多。因此,在进程之间进行切换是不好的。当CPU决定切换进程时,进程中有太多的信息需要保存和重新加载。
另一方面,一个线程更小,所以它更适合于切换。进程可能具有并发运行的多个线程,这意味着不是在相同的确切时间内运行,而是一起运行并在它们之间切换。这里的上下文切换更好,因为线程没有那么多的信息可以存储/重新加载。
如果您只有一个核心,那么大多数情况下您只能执行并发执行。一旦有了多个内核,就可以在两个核心上运行线程,从而同时执行。应该由操作系统来安排线程何时运行、进程何时运行、何时切换、如何切换它们等等。操作系统给您的错觉是,在不总是这样的情况下,工作是同时进行的。
如果你有更多的困惑,可以随意评论。
发布于 2017-01-31 16:48:02
进程是一个与操作系统(OS)非常相关的东西。线程是最简单的,是一个正在执行的程序。一个或多个线程在进程的上下文中运行。Java虚拟机(JVM)是操作系统中的一个进程。
在JVM中,您可以同时运行多个线程。
处理器是机器的资源,就像内存一样。您的操作系统允许您的进程在我们简单的案例处理器和内存中共享可用的资源。
使用Java进行开发时,计算机中的所有处理器都是可用的资源。
当您开发您的解决方案时,您甚至可以让多个Java进程(即多个JVM)每个运行一个或多个线程。但这主要取决于你的问题。
进程和线程之间真正的区别在于,两者都有一个正在执行的程序,但是线程共享相同的内存。这允许您的线程在理论上处理相同的数据,但是您需要支付并发和同步的复杂性。
发布于 2017-01-31 16:48:30
每个CPU一次只运行一个进程中的一个线程。然而,操作系统可以停止并保存一个线程,并加载并运行另一个线程(只有0.0001秒),这就产生了一个错觉,即许多线程同时运行,即使只有一个线程正在运行。
https://stackoverflow.com/questions/41962794
复制相似问题