我需要一些帮助来理解并发编程的基础知识。事实上,我读的越多,我就越困惑。因此,我理解进程是一个程序的实例,它可以由一个或多个线程组成。在单个核心CPU中,只能同时执行一个线程,而在多核CPU中,可以同时运行多个线程。现在的问题是:
1)有多少线程和进程可以与一个四核CPU并发运行?同一时间只有四个线程?只有一个过程?
2)并行性是否仅适用于线程,而不适用于进程?例如,如果我在三核CPU上运行三个不同的应用程序(=processes),比如浏览器web、字处理器和计算器,那么它们是否只对每个应用程序使用一个内核并同时运行呢?
3)在许多书中,你可以找到三种状态的解释:可运行状态、阻塞状态和运行状态。它们是指进程还是线程,还是两者兼而有之?我不明白。谢谢。
发布于 2014-02-05 16:05:13
从概念层面上看,您可以认为进程和线程非常相似。主要的区别是,线程通常只能访问包含在生成线程的进程中的内存,而进程提供了一种简单的方法来杀死一捆线程。因此,当操作系统产生多个进程时,进程产生多个线程。我相信有人可以把这两种说法分开,但我发现它们至少在表面上是正确的。
首先,我要回答你的第三个问题,为你的其他问题提供一个更好的背景。线程和进程以RUNNABLE状态启动,这意味着线程/进程调度程序可以选择它作为在给定核心上运行的下一个线程/进程。一旦它被选中,它将被加载到该核心的上下文中,并进入RUNNING状态。这种情况一直持续到线程/进程完成其操作并停止运行,或者在条件下等待。这个等待使它处于BLOCKED状态。一旦该条件被解除,它将进入RUNNABLE状态(即使该条件在以后变为真!)
对于第一个问题,您可以生成尽可能多的进程和线程,就像您有系统资源一样,但是在任何给定的时间,每个虚拟核心中只有一个是RUNNING。(这是上文概述的甄选过程。)注意,当我说虚拟核心时,我指的是操作系统作为核心报告的内容。先进的技术使我们能够把看似多个核心的东西放在同一个核心上。因此,您可能有一个具有双超线程的4核系统,它将向操作系统报告8个内核。这是一种我们通常不关心的抽象--我们只关心操作系统说我们有多少个内核,然后就这样做了。
对于第二个问题,这两种方法都可以并行,但是您需要管理它们的内存不同。进程通常会使用文件系统或数据库来共享它们的内存(虽然进程间的通信是可能的,但在我的经验中这更困难)。线程具有共享内存空间的优点,但这也意味着它们必须位于同一个系统上--如果数据库可以从不同的机器访问,则可以在不同的机器上并行化进程。
发布于 2014-02-05 16:04:57
1)是的,在4个核心/4个线程CPU上,一次只能运行4个线程。如果我们谈论的是带有超线程的CPU,事情可能会更复杂一些,但老实说,我不会是解释它的合适人选。
2)是的,这是可能的。一个四核CPU可以一次运行4个线程--这些线程可能都属于同一个进程,或者属于4个不同的进程。
3)它们指的是线程。运行中的线程是一个线程,该线程被赋予了一个时间片,目前正在由CPU执行。例如,阻塞线程是等待I/O结果的线程。一个可运行的线程不再被阻塞,可以运行,但还没有得到一个时间片段。
https://stackoverflow.com/questions/21581953
复制相似问题