多线程与并发与并行与异步编程之间有什么区别?

two*_*.11 5 java parallel-processing concurrency multithreading asynchronous

几天,我想知道这四种类型的编程之间有什么区别.我在谷歌搜索信息但我无法回答我的问题,所以我决定问你,有人可以向我解释一下吗?谢谢 !

var*_*run 6

您提到的编程关键字是指为解决计算和处理领域的问题而出于特定原因而发明的技术.

每种技术旨在解决的简要本质:

  • 并发:手头有很多任务,我需要在每个任务中取得坚定的进展,而不是完成一个并继续以串行方式进入下一个.让我在每一个流程的工作,以便在给定时间点,有非零进步两个或两个以上的任务.(不一定同时)

  • 并行性:考虑到我的设备资源,有可能在单位时间内完成更多的工作.让我使用一些技术来提高吞吐量,可能会牺牲延迟,以便我的任务更快完成.

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

  • 异步:要完成的一组任务.我现在正在表演其中一个.让我打电话给我的朋友帮我完成另一项任务,我希望他/她在我继续执行任务的同时回复我的结果.

注意,上面讨论的技术不一定是相互排斥的.具体来说,多线程是一种并行性,这反过来会导致并发度超过1(非平凡的多线程).

顺便说一句,我维护了一个关于并行计算的博客.在其中一篇文章中,我写过关于同一领域中使用的行话.

http://magical-parallel-computing.blogspot.in/2017/04/parallel-computing-jargon.html

我希望它在概念层面帮助你.

  • 你说多线程意味着"...不止一个执行线程"; 好的,但什么是"执行线程"?如果你最近没有尝试向新手解释它,那么你可能不记得有些人获得这个想法是多么困难.如果noob知道"执行上下文"和"调用堆栈"是什么意思,你可以解释实现.而且,在更高级别,您可以将多线程作为组织执行并发任务和/或处理异步事件的程序的一种方式. (2认同)
  • 不,我认为这就像你在答案中所说的那样:"并行"就是利用硬件资源(例如,使用多个CPU),而"并发"仅仅意味着你可以在有其他任务时启动一项任务你已经开始,但尚未完成.我听说"重叠"正式定义为"一个_interval_的_start event_位于开始事件和其他某个间隔的_end event_之间." (2认同)