我大致了解并行计算和并行计算之间的区别。如果我错了,请纠正我。
并行计算
如果系统可以支持两个或多个,则可以说是并行 同时执行的动作。在并行编程中,效率是 主要问题。
并行计算
如果一个系统可以支持两个或多个,则称为并发 同时进行的操作。虽然,多个动作不是 必须在并发编程中同时执行。 在并发编程中,模块化,响应性和 可维护性很重要
我想知道如果我在多线程程序中执行并行编程代码会发生什么情况?在多线程服务器程序中使用Java的并行Stream。
该程序实际上会更有效吗?
我最初的想法是,这可能不是一个好主意,因为经过某种方式优化的多线程程序应该已经占用了线程。这里的并行可能会增加额外的开销。
答案 0 :(得分:2)
并发与并行性之间的关键区别在于,并发是在同一时间处理很多事情(给人一种同时感的错觉),或者处理并发事件本质上是隐藏了延迟。相反,并行是要同时做很多事情以提高速度。
两者都有不同的要求和用例。
并行机制用于实现运行时性能和效率,是的,由于其本质,它将为系统(Cpu,ram等)增加一些额外的开销。但这在当今的多核技术中被大量使用。
答案 1 :(得分:1)
我想知道如果我执行并行操作会发生什么 在多线程程序中编程代码?例如使用Java的 多线程服务器程序中的并行流。
基于我对Java运行时的有限了解,每个程序都已经是多线程的,应用程序的入口点是main
线程,它与其他运行时线程(gc
)一起运行。
假设您的应用程序产生了两个线程,并且在其中一个线程中创建了parallelStream。看起来parallelStreams api使用ForkJoinPool.commonPool
,它启动NUM_PROCESSES-1个线程。此时,您的应用程序可能具有比CPU多的线程,因此,如果您的parallelStream
计算受CPU限制,那么您已经在线程-> CPU上已经超额预定。
https://stackoverflow.com/a/21172732/594589
我对Java不熟悉,但有趣的是parallelStream共享相同的线程池。因此,如果您的程序产生了另一个线程并启动了另一个parallelStream,则第二个parallelStream将与第一个共享底层线程池线程!
根据我的经验,发现重要的是要考虑:
该程序实际上会更有效吗?
这完全取决于,唯一可以肯定的答案是使用这两种解决方案对目标体系结构/系统进行基准测试。
根据我的经验,在基本模式之外进行复杂并发的推理变得很困难。我相信这是俗话:
使其正常运行,使其正确,快速。
-肯特·贝克
来自。在这种情况下,请确保您的程序是并发安全的(正确的)并且没有死锁。然后开始测试,基准测试和运行实验。
在我有限的个人经验中,我发现分析在描述应用程序工作负载(CPU与IO)并找到一种建模方法方面大为不足,因此您可以按可配置的基准测试能力扩展利用系统的全部资源