并行处理

进程的并行和并发

匿名 (未验证) 提交于 2019-12-03 00:03:02
并行: 并行是指两者同时执行,比如赛跑,两个人都在不停的往前跑;(资源够用,比如三个线程,四核的CPU ) 并发: 并发是指资源有限的情况下,两者交替轮流使用资源,比如一段路(单核CPU资源)同时只能过一个人,A走一段后,让给B,B用完继续给A ,交替使用,目的是提高效率。 并行是从微观上,也就是在一个精确的时间片刻,有不同的程序在执行,这就要求必须有多个处理器。 并发是从宏观上,在一个时间段上可以看出是同时执行的,比如一个服务器同时处理多个session。 来源:博客园 作者: RandySun 链接:https://www.cnblogs.com/randysun/p/11517319.html

并行数据库体系

匿名 (未验证) 提交于 2019-12-02 23:34:01
并行数据库要求尽可能的并行执行所有的数据库操作,从而在整体上提高数据库系统的性能。 根据所在的计算机的处理器(Processor)、内存(Memory)及存储设备(Storage)的相互关系,并行数据库可以归纳为三种基本的体系结构(这也是并行计算的三种基本体系结构),即: 1. 共享内存结构(Shared-Memory)、 2. 共享磁盘结构(Shared-Disk) 3.无共享资源结构(Shared-Nothing)。 1、共享内存(Shared-Memory)结构 =多个处理 + 一个全局共享的内存(主存储器)和多个磁盘存储,各个处理器通过高速通讯网络(InterconnectionNetwork)与共享内存连接,并均可直接访问系统中的一个、多个或全部的磁盘存储,在系统中,所有的内存和磁盘存储均由多个处理器共享。 (1)提供多个数据库服务的处理器通过全局共享内存来交换消息和数据,通讯效率很高,查询内部和查询间的并行性的实现也均不需要额外的开销; (2)数据库中的数据存储在多个磁盘存储上,并可以为所有处理器访问; (3)在数据库软件的编制方面与单处理机的情形区别也不大。 这种结构由于使用了共享的内存,所以可以基于系统的实际负荷来动态地给系统中的各个处理器分配任务,从而可以很好地实现负荷均衡。 2、共享磁盘(Shared-Disk)结构 该结构由多个具有独立内存(主存储器

并行流适用场景-CPU密集型

匿名 (未验证) 提交于 2019-12-02 23:34:01
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/larva_s/article/details/90403578 文章目录 1. 场景描述 2. 原因猜测 3. 测试 3.1 默认并行流线程数 3.2 提高并行流线程数 3.3 测试结果:6w个任务 4. 总结 4.1 I/O密集型 4.1 CPU密集型 5. 参考资料 1. 场景描述 2. 原因猜测 3. 测试 @Service public class ConsumMsg { @Autowired StreamOpt streamOpt ; /** * 初始化任务队列 * @param count * @return */ public List < Integer > initMsg ( int count ) { List < Integer > list = Lists . newArrayList ( ) ; for ( int i = 0 ; i < count ; i ++ ) { list . add ( i ) ; } return list ; } /** * 并行流处理 * @param count */ public void parallel ( int count ) { List < Integer > list = initMsg ( count )

1 RAID技术入门

孤街醉人 提交于 2019-12-02 23:04:58
序 RAID一页通整理所有RAID技术、原理并配合相应RAID图解,给所有存储新人提供一个迅速学习、理解RAID技术的网上资源库,本文将持续更新,欢迎大家补充及投稿。中国存储网一如既往为广大存储界朋友提供免费、精品资料。 1.什么是Raid; RAID(Redundant Array of Inexpensive Disks)称为廉价磁盘冗余阵列。RAID 的基本原理是把多个便宜的小磁盘组合到一起,成为一个磁盘组,使性能达到或超过一个容量巨大、价格昂贵的磁盘。 目前 RAID技术大致分为两种:基于硬件的RAID技术和基于软件的RAID技术。 其中在Linux下通过自带的软件就能实现RAID功能,这样便可省去购买昂贵的硬件 RAID 控制器和附件就能极大地增强磁盘的 IO 性能和可靠性。由于是用软件去实现的RAID功能,所以它配置灵活、管理方便。同时使用软件RAID,还可以实现将几个物理磁盘合并成一个更大的虚拟设备,从而达到性能改进和数据冗余的目的。当然基于硬件的RAID解决方案比基于软件RAID技术在使用性能和服务性能上稍胜一筹,具体表现在检测和修复多位错误的能力、错误磁盘自动检测和阵列重建等方面。 2.RAID级别介绍; 一般常用的RAID阶层,分别是RAID 0、RAID1、RAID 2、RAID 3、RAID 4以及RAID 5,再加上二合一型 RAID 0+1或称RAID

Python说文解字_Python之多任务_01

匿名 (未验证) 提交于 2019-12-02 22:51:08
Python 之 多任务:   Python之多任务是现在多任务编程运用Python语言为载体的一种体现。其中涵盖:进程、线程、并发等方面的内容,以及包括近些年在大数据运算、人工智能领域运用强大的GPU运算能力实现的各种算法。属于Python语言中比较高级的应用形式。文章采取问答的形式对知识点和相关应用的模式进行详解,看似像意识流形态的文章,其内容也是遵循循序渐进,力求全面和精细。 问:什么是多任务? 答:百度定义:“当多任务处理是指用户可以在同一时间内运行多个应用程序,每个应用程序被称作一个任务。”也就是说操作系统可以同时运行多个任务。这个概念是基于操作系统来说的。比如电脑同时开启多个软件或者应用程序,这就是一种多任务的体现;于此相对如果我们电脑只能每次开启一个软件或者一个应用程序,关闭前者才能开启后者这就叫做单任务,在早期的电脑基本都属于单任务,对于现在的计算机应用基本上都属于多任务的形式存在,因此我们也只讨论多任务。 问:CPU是整个运算的核心,CPU、操作系统、多任务之间的关系什么? 答:1. 现在的CPU基本上都是2核以上的CPU,如果我们现在手里有一台单核的CPU和一台多核CPU,我们的多任务在上面又是怎么实现的呢?     1.1. 单核CPU实现多任务原理?       操作系统轮流让各个任务交替执行,CPU对每个任务进行“时间切片”的动作,这个切片时间非常短暂

并行编程(Parallel Framework)

匿名 (未验证) 提交于 2019-12-02 22:06:11
前言 并行编程: 通过编码方式利用多核或多处理器称为并行编程,多线程概念的一个子集。 并行处理 :把正在执行的大量的任务分割成小块,分配给多个同时运行的线程。多线程的一种。 并行编程分为如下几个结构 : 1. 并行的 LINQ 或 PLINQ 2. Parallel 类 3. 任务并行结构 4. 并发集合 5. SpinLock 和 SpinWait 这些是.NET 4.0引入的功能,一般被称为 PFX(Parallel Framework,并行框架) 。 Parallel 类和 任务并行结构 称为 TPL(Task Parallel Library,任务并行库) 。 并行框架(PFX) 1.并行框架基础 当前CPU技术达到瓶颈,而制造商将关注重点转移到提高内核技术上,而标准单线程代码并不会因此而自动提高运行速度。 利用多核提升程序性能通常需要对计算密集型代码进行一些处理: 1.将代码划分成块。 2.通过多线程并行执行这些代码块。 3.结果变为可用后,以线程安全和高性能的方式整合这些结果。 传统多线程结构虽然实现功能,但难度颇高且不方便,特别是划分和整理的步骤(本质问题是:多线程同时使用相同数据时,出于线程安全考虑进行锁定的常用策略会 引发大量竞争 )。 而 并行框架(Parallel Framework) 专门用于在这些应用场景中提供帮助。 2.并行框架组成 PFX

我已经理解了并发和并行的区别

匿名 (未验证) 提交于 2019-12-02 21:56:30
先举例子来理解这2个概念的区别。 老师让两个同学去办公室谈话。如果这两同学(进程)是并列跨过办公室门(CPU)的,那么就是并行。如果同学A先进入,然后同学B再进入,但是在办公室外的路人甲(用户)看来,同学A和同学B同时都在办公室内,这是并发。 其实这个例子不合理,因为真正的并行是多核CPU下的概念,但上面这个简单的例子非常有助于理解。 如果举例要精确一点,那么大概是这样的:进办公室有两个门(两CPU),如果两同学分别从不同的门进入,不管先后性,两者互相独立,那么是并行;如果两同学不管以什么方式进入,在路人甲看来,他两同时都在办公室内,就是并发。 我不信到现在还不理解并发和并行。 为什么操作系统上可以同时运行多个程序而用户感觉不出来? 这是因为无论是单CPU还是多CPU,操作系统都营造出了可以同时运行多个程序的 假象 。实际的过程操作系统对进程的调度以及CPU的快速上下文切换实现的: 每个进程执行一会就先停下来,然后CPU切换到下个被操作系统调度到的进程上使之运行 。因为切换的很快,使得用户认为操作系统一直在服务自己的程序。 再来解释并发就容易理解多了。 并发(concurrent)指的是多个程序可以同时运行的现象,更细化的是多进程可以同时运行或者多指令可以同时运行。但这不是重点,在描述并发的时候也不会去扣这种字眼是否精确,并发的重点在于它是一种现象。并发描述的是多进程同时运行的现象

自定义java 8 并行流的线程池

↘锁芯ラ 提交于 2019-12-02 19:57:48
自定义java 8 并行流的线程池 java 8 引入Stream的概念,一种有效的批量数据处理方式。在支持并发环境中可以获得并行stream。并行流能提升性能——采用多行程方式执行。本文我们看看Stream API 的最大限制,以及如何给并行流增加自定义线程池。 并行流 先从一个简单示例开始,调用Collection类型的parallelStream 方法——创建并行流: @Test public void givenList_whenCallingParallelStream_shouldBeParallelStream(){ List<Long> aList = new ArrayList<>(); Stream<Long> parallelStream = aList.parallelStream(); assertTrue(parallelStream.isParallel()); } 并发流缺省使用ForkJoinPool.commonPool()方法,整个应用共享一个线程池。 自定义线程池 在处理并发流时,我们可以传递自定义的线程池。下面示例中使用自定义线程池的并发流计算1到1,000,000之和: @Test public void giveRangeOfLongs_whenSummedInParallel_shouldBeEqualToExpectedTotal(

并行的执行效率一定高于串行吗?(多线程的执行效率一定高于单线程吗?)

旧城冷巷雨未停 提交于 2019-12-02 18:24:47
并行的执行效率一定高于串行吗?(多线程的执行效率一定高于单线程吗?) 一、什么是串行?什么是并行?       串行: 任务进行排队,一个一个执行;    并行: 多个任务齐头并进。 二、单核、多核这两种情况下的并行。    单核情况下的并行: 并非真的是多个任务同时进行的,是需要在这任务之间来回切换(即上下文切换)的。    多核情况下的并行: 是几核,就能真正做到几核同时执行各自的任务。 三、任务的两大类型。    “计算密集型”任务:   特点是要进行大量的计算,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,全靠CPU的运算能力。   这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,所以,要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数。    “IO密集型”任务:   涉及到网络、磁盘IO的任务都是IO密集型任务,这类任务的特点是CPU消耗很少,任务的大部分时间都在等待IO操作完成(因为IO(指把内容从硬盘上读到内存的过程,或者是从网络上接收信息到本机内存的过程)的速度远远低于CPU和内存的速度)。   对于IO密集型任务,任务越多,CPU效率越高,但也有一个限度。常见的大部分任务都是IO密集型任务,比如Web应用。 四、看完了上面几点,我们就可以对

并行的执行效率一定高于串行吗?(多线程的执行效率一定高于单线程吗?)

瘦欲@ 提交于 2019-12-02 18:18:48
一、什么是串行?什么是并行?       串行: 任务进行排队,一个一个执行;    并行: 多个任务齐头并进。 二、单核、多核这两种情况下的并行。    单核情况下的并行: 并非真的是多个任务同时进行的,是需要在这任务之间来回切换(即上下文切换)的。    多核情况下的并行: 是几核,就能真正做到几核同时执行各自的任务。 三、任务的两大类型。    “计算密集型”任务:   特点是要进行大量的计算,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,全靠CPU的运算能力。   这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,所以,要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数。    “IO密集型”任务:   涉及到网络、磁盘IO的任务都是IO密集型任务,这类任务的特点是CPU消耗很少,任务的大部分时间都在等待IO操作完成(因为IO(指把内容从硬盘上读到内存的过程,或者是从网络上接收信息到本机内存的过程)的速度远远低于CPU和内存的速度)。   对于IO密集型任务,任务越多,CPU效率越高,但也有一个限度。常见的大部分任务都是IO密集型任务,比如Web应用。 四、看完了上面几点,我们就可以对“并行的执行效率一定会高于串行吗”这个问题作出解答了。    答: 并不一定