java - 多线程、并发、并行和异步编程之间有什么区别?

标签 java multithreading asynchronous concurrency parallel-processing

这几天我一直在想这四种编程有什么区别。我在谷歌上搜索了资料,但我无法回答我的问题,所以我决定问你,有人能给我解释一下吗?谢谢!

最佳答案

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

每种技术旨在解决的问题的简明本质:

  • 并发性:手头有很多任务,我需要在每一项任务中都取得稳步进展,而不是以连续的方式完成一个然后继续下一个。让我处理每个流程,以便在给定的时间点两个或更多 任务有非零进度。 (不一定同时)

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

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

  • 异步:一组要完成的任务。 我目前正在执行其中一个。让我调用我的 friend 帮我完成另一项任务,我希望他/她在我继续执行我的任务时返回给我结果。

Note that the techniques discussed above are not necessarily mutually exclusive. Specifically, multi-threading is a type of parallelism, which in turn does result in degree of concurrency being more than 1 (non-trivial multi-threading).

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

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

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

关于java - 多线程、并发、并行和异步编程之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43764803/

相关文章:

java - 为什么JSTL有sql相关标签

Java method()++ VS method()+1

java - 这两个示例是否等效( volatile +同步增量与同步获取+增量)?

multithreading - Clojure - 有效地同时增加列表中的数字

ios - 使用 grand central dispatch 下载 UIImage

java - AsyncTask停止工作android

java - 对正在运行的进程执行命令

java - 使用迭代器的 ConcurrentModificationException

c++ - 在没有同步机制的情况下,不同线程同时读取单个 c++ std::map 对象是否安全?

jquery - 如何在 '.append()'循环内同步 'for'和ajax查询