并发和多线程有什么区别?

4

并发和多线程有什么区别?并发只有在多核CPU上才可能存在吗?可以通过示例来解释吗?


可能是并发和多线程的重复问题。 - Mr Rho
或者并发与并行 - Linus
并行是并发或多线程的同义词吗? - Sneha S
1
将您在问题上放置的[multithreading]和[concurrency]标签悬停,直到出现黑色弹出框,然后在其中单击“信息”。 - BalusC
1
多线程不是并行的同义词...然而,认为多线程利用多个核心是一个常见的错误,这更准确地描述了并行性。 - Linus
显示剩余3条评论
2个回答

4
并发和多线程有什么区别?
并发描述进程运行的方式。它们可以是顺序(一个接一个地),同时(虽然不一定在同一时刻,但能够“同时”取得进展),或并行(它们同时发生)。
多线程是一种技术,可以分配单独的执行线程;它们本质上是具有某些优点的轻量级进程,涉及到它们父进程的共享资源。
如果你仔细观察,多线程在并发和非并发系统都是可能的。一个线程是一个轻量级进程(相对于进程而言);因此,在非并发系统上拥有多个线程不会导致并行编程。它们仍然会在另一个完成之前启动并运行。而在并发系统上,它们将各自获得一些 CPU 时间;它们将同时取得进展。
并发只能在多核 CPU 上实现吗?
我认为我们现在知道答案是否定的了。进程的并发执行已经变得司空见惯,以至于人们很容易误解它与并行性(一种更强大的工具)之间的关系。
举个例子,想想你的机器。它一直在做各种各样的事情,但你(希望)没有体验到任何性能上的延迟。所有这些进程都在并发运行,即使在单核机器上也给你,用户,提供了并行性的感知(我知道,因为我很老 :))。
但是归并排序呢?我们不能同时在数据的两半上执行两个归并排序吗?只有当我们拥有多个核心或 CPU 时才能做到。

你是指时间片吗? - Sneha S
@SnehaS,在单核系统中,每个进程将根据系统的调度算法“轮流”运行。 - ChiefTwoPencils
@SnehaS,不用谢。我基本上重新写了答案,希望它能更好地为您服务。如果满足您的需求,请考虑点赞或接受答案。 - ChiefTwoPencils
@ChiefTwoPencils 确定,先生。那个编辑后的答案非常简单且信息量大。谢谢。 - Sneha S

-1

并发意味着同时执行多个任务。这意味着多个任务在同时运行。因此,要同时运行多个任务,您需要多个线程。

因此,通过多线程实现并发

现在来回答你的问题:

并发只能在多核CPU中实现吗?

答案是

如果我有2个线程和只有1个核心。在这种情况下,CPU将给每个线程完成其任务的时间。因此,即使在单核CPU中也可以进行多线程处理。


1
同时的意思是并行;而并发不等于并行。 - ChiefTwoPencils
@SnehaS:是的,如果没有并发,如果您启动两个任务,则要么Task1将运行,然后完成,然后Task2将完成;或者Task2将首先运行,然后完成,然后Task1将完成。但在并发的情况下,两个任务都在同时取得进展。 - thedarkpassenger
@ChiefTwoPencils,并发 = 多个进程同时进行。可以通过多线程或并行处理(只有在多核处理器上)实现。我说的对吗? - Sneha S
@ChiefTwoPencils:并发不等于并行?https://zh.wikipedia.org/wiki/%E5%B9%B6%E5%8F%91_(%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A7%91%E5%AD%A6) - thedarkpassenger
@AnshulJain 这个链接也不错,我认为。 - Sneha S
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接