Java 如果我在多线程服务器程序中运行并行代码,会发生什么?
我大致了解并行计算和并发计算之间的区别。如果我错了,请纠正我 并行计算 如果一个系统能够支持两个或两个以上,则称之为并行系统 同时执行的操作。在并行编程中,效率是至关重要的 主要关注点 并行计算 如果一个系统可以支持两个或多个,则称之为并发系统 同时正在进行的行动。尽管如此,多个操作并不是必需的 必须在并发编程中同时执行。 在并发编程中,模块化、响应性和 可维护性很重要 我想知道如果我在多线程程序中执行并行编程代码会发生什么?例如,在多线程服务器程序中使用Java的并行流 该计划真的会更有效吗Java 如果我在多线程服务器程序中运行并行代码,会发生什么?,java,multithreading,concurrency,parallel-processing,Java,Multithreading,Concurrency,Parallel Processing,我大致了解并行计算和并发计算之间的区别。如果我错了,请纠正我 并行计算 如果一个系统能够支持两个或两个以上,则称之为并行系统 同时执行的操作。在并行编程中,效率是至关重要的 主要关注点 并行计算 如果一个系统可以支持两个或多个,则称之为并发系统 同时正在进行的行动。尽管如此,多个操作并不是必需的 必须在并发编程中同时执行。 在并发编程中,模块化、响应性和 可维护性很重要 我想知道如果我在多线程程序中执行并行编程代码会发生什么?例如,在多线程服务器程序中使用Java的并行流 该计划真的会更有效吗
我最初的想法是,这可能不是一个好主意,因为经过某种优化的多线程程序应该已经占用了线程。这里的并行性可能会带来额外的开销 并发性和并行性之间的关键区别在于,并发性是指同时处理很多事情(给人以同时性的假象),或者处理并发事件本质上隐藏了延迟。相反,并行性是指同时做很多事情来提高速度 两者都有不同的需求和用例
并行性用于实现运行时性能和效率,是的,由于其性质,它会给系统(Cpu、ram等)增加一些额外的开销。但在当今的多核技术中,这一概念被大量使用。并发和并行之间的关键区别在于,并发是指同时处理很多事情(给人以同时性的错觉)或处理并发事件,本质上隐藏了延迟。相反,并行性是指同时做很多事情来提高速度 两者都有不同的需求和用例 并行性用于实现运行时性能和效率,是的,由于其性质,它会给系统(Cpu、ram等)增加一些额外的开销。但在当今的多核技术中,这一概念被大量使用 我想知道如果我并行执行会发生什么 多线程程序中的编程代码?e、 g.使用Java的 多线程服务器程序中的并行流 基于我对Java运行时的有限知识,每个程序都已经是多线程的,应用程序入口点是
main
线程,它与其他运行时线程一起运行(gc
)
假设应用程序生成两个线程,并在其中一个线程中创建并行流。看起来parallelStreams api使用了一个ForkJoinPool.commonPool
,它启动NUM_进程-1个线程。此时,应用程序的线程可能比CPU多,因此,如果parallelStream
计算受CPU限制,则线程->CPU的订阅量已经过多
我不熟悉java,但有意思的是,parallelStream共享同一个线程池。因此,如果您的程序生成了另一个线程并启动了另一个并行流,那么第二个并行流将与第一个共享底层线程池线程
根据我的经验,我发现重要的是要考虑:
- 应用程序正在执行的工作负载类型(CPU与IO)
- 可用并发原语的类型(线程、进程、绿色线程、epoll aysyncio等)
- 您的系统资源(即CPU可用)
- 应用程序并发原语如何映射到底层操作系统资源
- 应用程序在任何给定时间拥有的并发原语的数量
根据我的经验,对基本模式之外的复杂并发性进行推理在很大程度上是一种冒险。我相信这就是俗语所说的: 让它工作,让它正确,让它快速。
--肯特贝克 来自。在这种情况下,请确保您的程序是并发安全的(确保正确),并且没有死锁。然后开始测试、基准测试和运行实验 在我有限的个人经验中,我发现,分析在很大程度上是分崩离析的,不仅仅是描述您的应用程序工作负载(CPU与IO),并找到一种方法对其进行建模,以便您可以扩展以可配置的方式利用系统的全部资源 我想知道如果我并行执行会发生什么 多线程程序中的编程代码?e、 g.使用Java的 多线程服务器程序中的并行流 基于我对Java运行时的有限知识,每个程序都已经是多线程的,应用程序入口点是
main
线程,它与其他运行时线程一起运行(gc
)
假设应用程序生成两个线程,并在其中一个线程中创建并行流。看起来parallelStreams api使用了一个ForkJoinPool.commonPool
,它启动NUM_进程-1个线程。此时,应用程序的线程可能比CPU多,因此,如果parallelStream
计算受CPU限制,则线程->CPU的订阅量已经过多
我不熟悉java,但有意思的是,parallelStream共享同一个线程池。因此,如果您的程序生成了另一个线程并启动了另一个线程