进程,线程和并发编程

时间:2014-02-05 15:53:48

标签: multithreading process multicore

我需要一些帮助来理解并发编程的基础知识。事实上,我阅读的越多,我就越感到困惑。 所以,我理解一个进程是一个顺序执行的程序实例,它可以由一个或多个线程组成。在单核CPU中,一次只能执行一个线程,而在多核CPU中,许多线程可以同时运行。 现在的问题是:

1)有多少线程和进程可以与例如四核CPU同时运行?只有四个线程同时?只有一个过程?

2)并行性是否只适用于线程而不适用于进程?例如,如果我在三核CPU上运行三个不同的应用程序(=进程),如浏览器Web,文字处理器和计算器,它们是否只能为每个应用程序使用核心并同时运行?

3)在很多书中,你可以找到三种状态的解释:可运行,阻塞和运行。他们是指流程或线程,还是两者兼而有之?我不明白。 谢谢。

2 个答案:

答案 0 :(得分:2)

1)是的,在4核/ 4线程CPU上,一次只能运行4个线程。如果我们谈论带有超线程的CPU,事情会有点复杂,但说实话,我不是解释它的合适人选。

2)是的,这是可能的。四核CPU一次可以运行4个线程 - 这些线程可能都属于同一个进程,也可能属于4个不同的进程。

3)他们引用线程。正在运行的线程是一个给定时间片并且当前正由CPU执行的线程。被阻止的线程是例如等待I / O结果的线程。可运行的线程是一个不再被阻塞,准备好运行但尚未给出时间片的线程。

答案 1 :(得分:2)

从概念层面来看,您可以认为流程和线程非常类似。主要的区别在于,线程通常只能访问生成它的进程中包含的内存,并且进程可以轻松地杀死一组线程。因此,当操作系统生成多个进程时,进程会生成多个线程。我确信有人可以将这两个陈述分开,但我发现它们至少在表面上是真实的。

我必须先回答你的第三个问题,为你的其他问题提供更好的背景信息。线程和进程以RUNNABLE状态开始,这意味着线程/进程调度程序可以选择它作为在给定核心上运行的下一个线程/进程。选择后,它将加载到该核心的上下文中并进入RUNNING状态。这一直持续到线程/进程完成其操作并死亡,或者等待条件。等待使其处于BLOCKED状态。一旦该条件被解除,它就会进入RUNNABLE状态(即使以后该条件变为真实!)

对于您的第一个问题,您可以生成与系统资源一样多的进程和线程,但在任何给定时间每个虚拟核心只能生成一个RUNNING。 (这是上面列出的选择过程。)请注意,当我说虚拟核心时,我的意思是操作系统报告的核心内容。先进的技术允许我们将看似多核的内容放在同一个核心上。因此,您可能拥有一个具有双超线程的4核系统,该系统将向操作系统报告8个核心。这是一个我们通常不关心的抽象 - 我们只关心操作系统说我们拥有多少核心并与之相关。

对于你的第二个问题,两者都可以实现并行性,但你需要管理不同的内存。进程通常会使用文件系统或数据库来共享内存(尽管进程间通信是可能的,但根据我的经验来看,这更加困难)。线程具有共享内存空间的优势,但这也意味着它们必须位于同一系统上 - 可以从不同的机器访问数据库,您可以在不同的机器上并行化进程。