Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果我在多线程服务器程序中运行并行代码,会发生什么?_Java_Multithreading_Concurrency_Parallel Processing - Fatal编程技术网

Java 如果我在多线程服务器程序中运行并行代码,会发生什么?

Java 如果我在多线程服务器程序中运行并行代码,会发生什么?,java,multithreading,concurrency,parallel-processing,Java,Multithreading,Concurrency,Parallel Processing,我大致了解并行计算和并发计算之间的区别。如果我错了,请纠正我 并行计算 如果一个系统能够支持两个或两个以上,则称之为并行系统 同时执行的操作。在并行编程中,效率是至关重要的 主要关注点 并行计算 如果一个系统可以支持两个或多个,则称之为并发系统 同时正在进行的行动。尽管如此,多个操作并不是必需的 必须在并发编程中同时执行。 在并发编程中,模块化、响应性和 可维护性很重要 我想知道如果我在多线程程序中执行并行编程代码会发生什么?例如,在多线程服务器程序中使用Java的并行流 该计划真的会更有效吗

我大致了解并行计算和并发计算之间的区别。如果我错了,请纠正我

并行计算

如果一个系统能够支持两个或两个以上,则称之为并行系统 同时执行的操作。在并行编程中,效率是至关重要的 主要关注点

并行计算

如果一个系统可以支持两个或多个,则称之为并发系统 同时正在进行的行动。尽管如此,多个操作并不是必需的 必须在并发编程中同时执行。 在并发编程中,模块化、响应性和 可维护性很重要

我想知道如果我在多线程程序中执行并行编程代码会发生什么?例如,在多线程服务器程序中使用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共享同一个线程池。因此,如果您的程序生成了另一个线程并启动了另一个线程