多线程、并发、并行和异步编程有何不同?

6

最近几天,我一直在想这四种编程类型的区别。我在Google上搜寻了相关信息,但没有找到答案,所以我决定问问你们,有人可以帮忙解释一下吗?谢谢!

1个回答

6
你所提到的编程关键字是指为了解决计算和处理领域中的问题而发明的特定技术。
每种技术旨在解决的问题的简洁本质:
  • 并发性:有许多任务需要完成,我需要在每一个任务中保持坚定的进展,而不是按顺序完成一个任务后再转向下一个。让我同时处理多个进程,这样在某一时间点,可以在两个或更多任务中实现非零进展不一定同时)。

  • 并行性:根据我的设备资源,我有可能在单位时间内完成更多的工作。让我使用一些技术增加吞吐量可能会牺牲延迟,以便我的任务能够更快地完成。

  • 多线程:我的设备硬件和软件都支持一个程序中多个执行线程;让我将计算密集型计算分布在那些处理器/核心/线程池之间!

  • 异步性:一组任务需要完成。我正在完成其中一个任务。让我呼叫我的朋友帮我完成另一个任务,我希望他/她在我继续执行我的任务时用结果回到我这里。

请注意,上述讨论的技术不一定是互相排斥的。具体来说,多线程是并行的一种类型,进而导致并发度大于1(非平凡多线程)。顺便提一下,我维护了一个关于并行计算的博客,在其中一篇文章中,我写了关于该领域使用的术语。

https://magical-parallel-computing.blogspot.com/2017/04/parallel-computing-jargon.html

我希望它在概念层面上对你有所帮助。


2
你说多线程意味着“有多个执行线程”;好的,但是什么是“执行线程”?如果你最近没有尝试向新手解释过,那么你可能不记得对于一些人来说理解这个概念是多么困难。如果新手了解“执行上下文”和“调用堆栈”的含义,你可以解释其实现。在更高层面上,你可以谈论多线程作为一种组织程序的方式,以执行并发任务和/或处理异步事件。 - Solomon Slow
@james large 谢谢!哦,在同一点上,我已经提到任务不一定需要同时发生,因此它们不需要重叠,例如协同程序的情况。如果它们在时间上重叠,那么它不仅是并发,也是并行;因为重叠的执行需要多个处理单元/工作者。 - varun
2
不,我认为你在回答中所说的就是:“并行性”完全是关于利用硬件资源(例如使用多个CPU),而“并发性”仅意味着您可以在启动尚未完成的某些其他任务时启动一个任务。我听说“重叠”被正式定义为,“一个间隔的开始事件位于另一个间隔的开始事件和结束事件之间。” - Solomon Slow
@jameslarge 是的,你说得对!我想尽可能地保持解释的抽象性,看起来在并发、并行和异步方面效果很好。然而,由于多线程是一种特定类型的并行处理,我不得不包含一些上下文关键词,而不深入描述基本原理... 如果你愿意,可以添加一些内容,我很乐意接受! :) - varun
为什么会这样?可能会牺牲延迟。 - garci560
显示剩余5条评论

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