并行处理

JVM垃圾回收器

[亡魂溺海] 提交于 2020-01-10 07:08:29
文章目录 Serial收集器 Serial Old收集器 ParNew收集器 Parallel Scavenge收集器 Parallel Old收集器 CMS收集器 G1(Garbage-First)收集器 垃圾收集器参数总结 收集器设置 收集器参数 Serial收集器 是一个单线程的收集器,“Stop The World” 对于运行在Client模式下的虚拟机来说是一个很好的选择 简单而高效 Serial Old收集器 Serial收集器的老年代版本,它同样是一个单线程收集器,使用“标记-整理”算法。 主要意义也是在于给Client模式下的虚拟机使用。 如果在Server模式下,那么它主要还有两大用途: 一种用途是在JDK 1.5以及之前的版本中与Parallel Scavenge收集器搭配使用, 另一种用途就是作为CMS收集器的后备预案,在并发收集发生Concurrent Mode Failure时使用。 ParNew收集器 Serial收集器的多线程版本 单CPU不如Serial Server模式下新生代首选,目前只有它能与CMS收集器配合工作 使用-XX:+UseConcMarkSweepGC选项后的默认新生代收集器,也可以使用-XX:+UseParNewGC选项来强制指定它。 -XX:ParallelGCThreads:限制垃圾收集的线程数。 Parallel

并发和并行

旧街凉风 提交于 2020-01-08 13:27:01
并发   并发当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。.这种方式我们称之为并发(Concurrent)。 并行   当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。 区别:并发和并行是即相似又有区别的两个概念,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。在 多道程序 环境下, 并发性 是指在一段时间内宏观上有多个程序在同时运行,但在 单处理机系统 中,每一时刻却仅能有一道程序执行,故微观上这些程序只能是分时地交替执行。倘若在 计算机系统 中有多个 处理机 ,则这些可以并发执行的程序便可被分配到多个处理机上,实现 并行执行 ,即利用每个处理机来处理一个可并发执行的程序,这样,多个程序便可以同时执行。 来源: https://www.cnblogs.com/Bin-y/p/10964035.html

storm拓扑的并行度(parallelism)概念

本小妞迷上赌 提交于 2020-01-07 08:29:56
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1 storm并行的基本概念 一个运行中的拓扑是由什么构成的:工作进程(worker processes),执行器(executors)和任务(tasks) 在一个 Storm 集群中,Storm 主要通过以下三个部件来运行拓扑: 工作进程(worker processes)(进程数) 执行器(executors)(线程数) 任务(tasks)(实例组件数) storm集群中的一个机器可以运行一个或者多个worker,对应于一个或者多个topologies.1个worker进程运行1个或多个 excutor线程。每个worker从属于一个topology.executor是单线程。每1个executor运行着相同的组件(spout或 bolt)的1个或多个task。1个task执行着实际的数据处理。 下面是他们之间相互关系的简单图示。 2 是否需要提高workers数目 (1) 最好 一台机器上的一个topology只使用一个worker,主要原因时减少了worker之间的数据传输 (2) 有更多的worker可能会有更好的表现,这取决于你的瓶颈所在。每个worker都有通过一个线程将元组转移到其他的worker,所以如果你的瓶颈在CPU和每个worker正在处理大量的元组

【c#基础】并行Linq

柔情痞子 提交于 2020-01-04 05:24:29
并行:指在同一时刻,有多条指令在多个处理器上同时执行 并发:指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行 并发是逻辑上的同时发生(simultaneous),而并行是物理上的同时发生。 串行:A和B两个任务运行在一个CPU线程上,在A任务执行完之前不可以执行B。即,在整个程序的运行过程中,仅存在一个运行上下文,即一个调用栈一个堆。程序会按顺序执行每个指令。 1:并行Linq System.Linq名称空间包含的 类ParallelEnumerable可以分解查询的工作, 使其分布在多个线程上。 尽管Enumerable类给IEnumerable<T>接口定义了扩展方法。但ParallelEnumerable类的大多数扩展方法是ParallelQuery<TSource>类的扩展。AsParallel()方法,它扩展了IEnumerable<TSource>接口,返回ParallelQuery<TSource>类,所以正常的集合类可以以并行方式查询。 2:并行查询 对于可以放在CPU缓存中的小集合,并行Linq看不出效果。 AsParallel()方法用ParallelEnumerable()类定义,以扩展IEnumerable<T>接口

8.1Go并发

拜拜、爱过 提交于 2020-01-04 05:20:52
第八章 Go并发 Go语言区别于其他语言的一大特点就是出色的并发性能,最重要的一个特性那就是 go 关键字。 并发场景: UI小姐姐一边开着PS软件,一边微信疯狂的和产品经理打字交流,后台还听着网易云音乐。。 双11当天。。大伙疯狂的访问淘宝网站 CPU从单核向多核发展,计算机程序不该是串行的,浪费资源 串行程序由于IO操作被阻塞,整个程序处于停滞状态,其他IO无关的任务无法执行 并发必要性: 充分利用CPU核心的优势,提高程序执行效率 实现并发的模型: 多进程,多进程是在操作系统层面并发的基本模式,进程间互不影响,但是开销最大,进程由内核管理。 多线程,属于系统层面的并发模式,也是用的最多的有效模式,大多数软件使用多线程,开销小于多进程。 基于回调的非阻塞/异步IO。此架构处于多线程模式的危机,高并发服务器下,多线程会消耗殆尽服务器的内存和CPU资源。而通过事件驱动的方式使用异步IO,尽可能少用线程,降低开销,Node.js就是如此实践,但是此模式编程复杂度较高。 协程,Coroutine是一种用户态线程,寄存于线程中,系统开销极小,可以有效提高线程任务并发性,使用方式简单,结构清晰,避免多线程的缺点。需要编程语言的支持,如不支持,需要用户自行实现调度器。 共享内存系统 是比较常用的并发模式,线程之间通信采用共享内存的方式,程序员需要加锁等操作避免死锁、资源竞争等问题。

Java并发编程核心概念一览

戏子无情 提交于 2020-01-04 05:14:49
作者博客地址 https://muggle.javaboy.org。 并行相关概念 同步和异步 同步和异步通常来形容一次方法的调用。同步方法一旦开始,调用者必须等到方法结束才能执行后续动作;异步方法则是在调用该方法后不必等到该方法执行完就能执行后面的代码,该方法会在另一个线程异步执行,异步方法总是伴随着回调,通过回调来获得异步方法的执行结果。 并发和并行 很多人都将并发与并行混淆在一起,它们虽然都可以表示两个或者多个任务一起执行,但执行过程上是有区别的。并发是多个任务交替执行,多任务之间还是串行的;而并行是多个任务同时执行,和并发有本质区别。 对计算机而言,如果系统内只有一个 CPU ,而使用多进程或者多线程执行任务,那么这种情况下多线程或者多进程就是并发执行,并行只可能出现在多核系统中。当然,对 Java 程序而言,我们不必去关心程序是并行还是并发。 临界区 临界区表示的是多个线程共享但同时只能有一个线程使用它的资源。在并行程序中临界区资源是受保护的,必须确保同一时刻只有一个线程能使用它。 阻塞 如果一个线程占有了临界区的资源,其他需要使用这个临界区资源的线程必须在这个临界区进行等待(线程被挂起),这种情况就是发生了阻塞(线程停滞不前)。 死锁\饥饿\活锁 死锁就是多个线程需要其他线程的资源才能释放它所拥有的资源,而其他线程释放这个线程需要的资源必须先获得这个线程所拥有的资源

GPU---并行计算利器

笑着哭i 提交于 2020-01-04 05:06:09
大数据集群计算利器之MPI/OpenMP ---以连通域标记算法并行化为例 1 背景 图像连通域标记算法是从一幅栅格图像(通常为二值图像)中,将互相邻接(4邻接或8邻接)的具有非背景值的像素集合提取出来,为不同的连通域填入数字标记,并且统计连通域的数目。通过对栅格图像中进行连通域标记,可用于静态地分析各连通域斑块的分布,或动态地分析这些斑块随时间的集聚或离散,是图像处理非常基础的算法。目前常用的连通域标记算法有1)扫描法(二次扫描法、单向反复扫描法等)、2)线标记法、3)区域增长法。二次扫描法由于简单通用而被广泛使用! 图1 连通域标记示意图 随着所要处理的数据量越来越大,使用传统的串行计算技术的连通域标记算法运行时间过长,难以满足实际应用的效率需求。随着并行计算技术的发展,利用不同的编程模型,许多数据密集型的计算任务可以被同时分配给单机多核或多机多处理器进行并行处理,从而有可能大幅度缩减计算时间。目前在集群计算领域广泛使用MPI来进行并行化,在单机领域广泛使用OpenMP进行化,本文针对基于等价对的二值图像连通域标记算法的进行了并行化设计,利用不同的并行编程模型分别实现了不同的并行算法,并通过实验对利用不同并行编程模型所实现的连通域标记算法进行了性能对比分析。 2 二次扫描串行算法思想    顾名思义,二次扫描串行算法步骤包含两部分。 2.1 第一次扫描 a)标记 b

并发编程下的性能定律(翻译)

空扰寡人 提交于 2020-01-04 05:05:03
并发编程下的性能定律 ( 翻译 ) 理解 Amdahl 定律 如果你想利用多核的优势在尽可能少的时间运行尽可能多的指令,那么就需要以并行的序列分离代码。然而,大多的算法需要运行一些串行代码来调整并行执行。例如,并行执行很多代码块,最后收集他们执行的结果。那些分解并行执行工作复杂和收集执行结果的代码是串行代码,它是不能利用并行的优势的。如果你的算法中有很多这样的代码片段,那么串行代码所占的比例就会增加,并且能够获取到的性能收益就会减少。 Gene Amdahl 是一个著名计算机架构师,当一个系统中仅有少量的计算机改善硬件的时候,那么能够获得最大的性能改善是多少呢?他做了大量与这方面有关的观察研究。他使用这些观察结果定义了 Amdable’s Law ,它是由一个预测使用多核处理器在理论上可以获得最大性能改善的公式组成。它也使用于那些运行在多核处理器上的并发算法。 Maximum speedup ( in times ) = 1/((1-p) + p/n) 在这个公式中 P 就是代码中可以完全并行执行的部分。 n 就是可用的执行单元的数目(处理器或者物理核心)。 根据这个公式,如果你有一个仅有 50% ( P = 0.5 )的工作需要并行执行的算法,那么在双核微处理器可以获得的最大速度是 1.33 倍。图 1-8 阐述了一个拥有 1000 个工作单元的算法分解成 500

【高性能并行计算】——第一课

会有一股神秘感。 提交于 2020-01-04 05:04:50
串行计算: 并行计算: 这里我们假定了要解决的问题完全可分为4个独立运行的部分,由4个processors来独立运行。实际问题中,独立性和关联性是一个“太极”关系,就涉及到划分的粒度和通讯的频率等等问题。 计算机系统可以分为以下四类:      单指令单数据流(SISD) :一个单处理器执行一个单指令流,对保存在一个存储器中的数据进程进行操作。      单指令多数据流(SIMD) :一个机器指令控制多个处理部件步伐一致的同时执行。每个处理部件都有一个相关的数据处理空间,因此,每条指令由不同的处理器在不同 的数据集合上执行。      多指令单数据流(MISD) :一系列数据被传送到一组处理器上,每个处理器执行不同的指令序列。      多指令多数据流(MIMD) :一组处理器同时在不同的数据集上执行不同的指令序列。 1、 什么是MPP? MPP (Massively Parallel Processing),即大规模并行处理,在数据库非共享集群中,每个节点都有独立的磁盘存储系统和内存系统,业务数据根据数据库模型和应用特点划分到各个节点上,每台数据节点通过专用网络或者商业通用网络互相连接,彼此协同计算,作为整体提供数据库服务。非共享数据库集群有完全的可伸缩性、高可用、高性能、优秀的性价比、资源共享等优势。 简单来说,MPP是将任务并行的分散到多个服务器和节点上

并行计算之基础概念

纵然是瞬间 提交于 2020-01-04 05:04:34
  并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段。它的基本思想是用多个处理器来协同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算。并行计算系统既可以是专门设计的、含有多个处理器的超级计算机,也可以是以某种方式互连的若干台的独立计算机构成的集群。通过并行计算集群完成数据的处理,再将处理的结果返回给用户。     并行计算或称平行计算是相对于串行计算来说的。所谓并行计算可分为时间上的并行和空间上的并行。 时间上的并行就是指流水线技术,而空间上的并行则是指用多个处理器并发的执行计算。   并行计算科学中主要研究的是空间上的并行问题。从程序和算法设计人员的角度来看,并行计算又可分为数据并行和任务并行。空间上的并行导致了两类并行机的产生,按照Flynn的说法分为: 单指令流多数据流(SIMD) 和 多指令流多数据流(MIMD) 。我们常用的串行机也叫做单指令流单数据流(SISD)。   MIMD类的机器又可分为以下常见的五类:并行向量处理机(PVP)、对称多处理机(SMP)、大规模并行处理机(MPP)、工作站机群(COW)、分布式共享存储处理机(DSM)。   目前常见的并行编程技术包括:MPI、OPENMP、OPENCL、OPENGL、CUDA