并行处理

python细节1

自古美人都是妖i 提交于 2020-03-21 18:47:28
并发:交替处理多个任务的能力 并行:同时处理多个任务的能力 1. GIL 全局解释器锁 作用:保证同一时刻只有一个线程使用cpu 效果:一个进程中只有一个gil,多个线程需要去抢夺GIl,没有办法真正的使用多个cpu。 注意:GIL存在于cpyhton解释器中的 多线程使用情况: 1 科学计算 单线程比较快 2 i/o操作 多线程比较快 2. 深拷贝和浅拷贝 copy.copy()浅拷贝 copy.deepcopy()深拷贝 在拷贝简单的数据类型 (a = [1,2]) 的时候没有区别 都是开辟新的一片空间存储数据 拷贝有嵌套的数据类型 浅拷贝 仅仅是拷贝了引用 没有办法保证数据的独立性 深拷贝 完全拷贝数据 并且开辟空间 保证数据的独立性 拷贝元组(不可变类型的数据)的时候 深拷贝和浅拷贝是一样的 不开辟新的空间 直接引用 如果不可变类型 比如元组中 有可变类型的数据 深拷贝:保证数据的独立性 浅拷贝:直接引用 切片拷贝,字典拷贝都是浅拷贝 3. 私有化 私有属性是通过 名字重整 进行保护的 01 父类中属性名为__名字的,子类不继承,子类不能访问 02 如果在子类中向__名字赋值,那么会在子类中定义的一个与父类相同名字的属性 03 _名的变量、函数、类在使用from xxx import *时都不会被导入 4.import搜索路径:sys.path 模块重写后,需要重新导入

并行与并发

我只是一个虾纸丫 提交于 2020-03-21 16:58:56
关于并行与并发,百度时发现知乎有人说的很形象,就粘了过来 【你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。 你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。 你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。 并发的关键是你有处理多个任务的能力,不一定要同时。 并行的关键是你有同时处理多个任务的能力。 所以我认为它们最关键的点就是:是否是『同时』。 作者:龚昱阳 Dozer 链接:https://www.zhihu.com/question/33515481/answer/58849148 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。】 并发: concurrence,在同一处理器上处理多个任务(不是同时处理) 并行:parallelism,在多个处理器同时处理多个任务(可同时处理) 第一次写博客,渴望得到大家的指正!希望在记录知识的同时不断的成长。 来源: https://www.cnblogs.com/MNewLife/p/8468785.html

MapReduce_input阶段

孤街浪徒 提交于 2020-03-18 13:45:34
Input阶段将数据节点上的数据进行反序列化,然后划分切片。 数据切片:(1)一个job的map阶段并行度由客户端在提交job时的切片数决定      (2)每个切片分配一个MapTask并行实例处理      (3)默认情况下,切片的大小等于BlockSize,也就是数据块大小       来源: https://www.cnblogs.com/lihui001/p/12516712.html

spark的性能优化

倾然丶 夕夏残阳落幕 提交于 2020-03-09 13:13:05
spark性能优化点 一、分配更多的资源 它是性能优化调优的王道,就是增加和分配更多的资源,这对于性能和速度上的提升是显而易见的, 基本上,在一定范围之内,增加资源与性能的提升,是成正比的;写完了一个复杂的spark作业之后,进行性能调 优的时候,首先第一步,就是要来调节优的资源配置;在这个基础之上,如果说你的spark作业,能够分配的资源达到 了你的能力范围的顶端之后,无法再分配更多的资源了,公司资源有限;那么才是考虑去做后面的这些性能调优的点。 1、分配哪些资源 executor-memory、executor-cores、driver-memory 2、在哪里设置 在实际的生产环境中,提交spark任务时,使用spark‐submit shell脚本,在里面调整对应的参数。 提交任务的脚本: spark‐submit \ ‐‐master spark://node1:7077 \ ‐‐class cn.itcast.WordCount \ ‐‐num‐executors 3 \ 配置executor的数量 ‐‐driver‐memory 1g \ 配置driver的内存(影响不大) ‐‐executor‐memory 1g \ 配置每一个executor的内存大小 ‐‐executor‐cores 3 \ 配置每一个executor的cpu个数 /export/servers

并发编程和并行编程有什么区别?

风流意气都作罢 提交于 2020-03-08 18:16:49
并行编程和并行编程有什么区别? 我问谷歌,但没有找到任何可以帮助我理解这种差异的东西。 你能给我两个例子吗? 现在,我找到了以下解释: http : //www.linux-mag.com/id/7411- 但是“并发是程序的属性”与“并行执行是机器的属性”对我来说还不够-我还是不能说什么。 #1楼 我在一些博客中找到了此内容。 认为它是有用和相关的。 并发和并行性不是一回事。 如果未预先确定两个任务的执行顺序,则两个任务T1和T2是并发的, T1可以在T2之前执行并完成,T2可以在相同时间(并行)同时执行T1,T1和T2之前执行并完成,T1和T2可以交替执行,...如果有两个并发线程如果操作系统将其调度为在一个单核非SMT非CMP处理器上运行,则可能会并发但不会并行。 并行可能在多核,多处理器或分布式系统上进行。 并发通常被称为程序的属性,并且是比并行性更笼统的概念。 资料来源: https : //blogs.oracle.com/yuanlin/entry/concurrency_vs_parallelism_concurrent_programming #2楼 我相信并发编程是指多线程编程,它是让您的程序运行从硬件详细信息中抽象出来的多个线程。 并行编程是指专门设计程序算法以利用可用的并行执行。 例如,您可以并行执行某些算法的两个分支

关于iOS多线程的总结

笑着哭i 提交于 2020-03-08 10:01:16
关于iOS多线程的总结 在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项。当然也会给出几种多线程的案例,在实际使用中感受它们的区别。还有一点需要说明的是,这篇文章将会使用 Swift 和 Objective-c 两种语言讲解,双语幼儿园。OK,let's begin! 概述 这篇文章中,我不会说多线程是什么、线程和进程的区别、多线程有什么用,当然我也不会说什么是串行、什么是并行等问题,这些我们应该都知道的。 在 iOS 中其实目前有 4 套多线程方案,他们分别是: Pthreads NSThread GCD NSOperation & NSOperationQueue 所以接下来,我会一一讲解这些方案的使用方法和一些案例。在将这些内容的时候,我也会顺带说一些多线程周边产品。比如: 线程同步 、 延时执行 、 单例模式 等等。 Pthreads 其实这个方案不用说的,只是拿来充个数,为了让大家了解一下就好了。百度百科里是这么说的: POSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统(Unix、Linux、Mac OS X等)中,都使用Pthreads作为操作系统的线程。 简单地说,这是一套在很多操作系统上都通用的多线程API,所以移植性很强

spark调优

徘徊边缘 提交于 2020-03-07 19:15:04
1.分配更多的资源     它是性能优化调优的王道,就是增加和分配更多的资源,这对于性能和速度上的提升是显而易见的, 基本上,在一定范围之内,增加资源与性能的提升,是成正比的;写完了一个复杂的spark作业之后,进行性能调 优的时候,   首先第一步,就是要来调节优的资源配置;在这个基础之上,如果说你的spark作业,能够分配的资源达到 了你的能力范围的顶端之后,无法再分配更多的资源了,公司资源有限;那么才是考虑去做后面的这些性能调优的点。 2.参数调节到多大才算大      第一种情况:standalone模式 先计算出公司spark集群上的所有资源 每台节点的内存大小和cpu核数, 比如:一共有20台worker节点,每台节点8g内存,10个cpu。 实际任务在给定资源的时候,可以给20个executor、   每个executor的内存8g、每个executor的使用的cpu个数 10。 第二种情况:Yarn 先计算出yarn集群的所有大小,比如一共500g内存,100个cpu; 这个时候可以分配的大资源,比如给定50个executor、每个executor的内存   大小10g,每个executor使用的cpu 个数为2。 使用原则:你能使用的资源有多大,就尽量去调节到大的大小(executor的数量:几十个到上百个不等;executor的 内存;exector的cpu个数

Apache Spark源码走读之14 -- Graphx实现剖析

风流意气都作罢 提交于 2020-03-07 12:04:03
欢迎转载,转载请注明出处,徽沪一郎。 概要 图的并行化处理一直是一个非常热门的话题,这里头的重点有两个,一是如何将图的算法并行化,二是找到一个合适的并行化处理框架。Spark作为一个非常优秀的并行处理框架,将一些并行化的算法移到其上面就成了一个很自然的事情。 Graphx是一些图的常用算法在Spark上的并行化实现,同时提供了丰富的API接口。本文就Graphx的代码架构及pagerank在graphx中的具体实现做一个初步的学习。 Google为什么赢得了搜索引擎大战 当Google还在起步的时候,在搜索引擎领域,Yahoo正如日中天,红的发紫。显然,在Google面前的是一堵让人几乎没有任何希望的墙。 但世事难料,现在“外事问谷歌”成了不争的事实,Yahoo应也陪客了。 这种转换到底是如何形成的了,有一个因素是这样的,那就是Google发明了显著提高搜索准确率的PageRank算法。如果说PageRank算法的提出让谷歌牢牢站稳了搜索引擎大战的脚跟,这是毫不夸张的。 搜索引擎有几个要考虑的关键因素(个人观点而已)。 要想吸引用户,就必须要有出色的搜索准确率 有了用户,才能做广告投放,提高广告投放的针对性就可以盈利 上述两个方面都有非常优秀的算法。 废话少述,回到正题。PageRank算法是图论的一个具体应用,ok, 转到图论。 图论简介 图的组成

OpenMP--parallel computing 并行计算

梦想与她 提交于 2020-03-05 05:36:53
B站,OpenMP介绍 B站-Introduction to OpenMP OpenMP 1、OpenMp是并已被广泛接受的,用于共享内存并行系统的多处理器程序设计的一套指导性的编译处理方案。 2、OpenMP支持的编程语言包括C语言、C++和Fortran; 3、OpenMp提供了对并行算法的高层的抽象描述,程序员通过在源代码中加入专用的pragma来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通信。当选择忽略这些pragma,或者编译器不支持OpenMp时,程序又可退化为通常的程序(一般为串行),代码仍然可以正常运作,只是不能利用多线程来加速程序执行。 参见 OpenMP使用 这是一篇比较好的OpenMP简介 添加链接描述 为什么需要编写并行程序? 通常我们传统单核处理器上编写的程序无法利用多核处理器,我们需要使得程序充分利用处理器更快的运行程序,更加及时与逼真的模拟现实世界。为了达到这一目的,就需要软件开发工程师将串行程序改写为并行程序。 怎么样编写并行程序? 广泛采用的两种方式:任务并行和数据并行。 任务并行:是指将有待解决的问题需要执行的任务分配到各个核上完成。 数据并行:是指将有待解决的问题所需要处理的数据分配到各个核上完成,每个核在所分配的大致相当的数据集上执行相同操作。 这里我们举个例子来说明什么是任务并行,什么是数据并行

JAVA8新特性Stream

删除回忆录丶 提交于 2020-03-04 22:17:37
Java 8 中的 Streams API 详解 为什么需要 Stream Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程。通常编写并行代码很难而且容易出错, 但使用 Stream API 无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。所以说,Java 8 中首次出现的 java.util.stream 是一个函数式语言+多核时代综合影响的产物。 什么是聚合操作 在传统的 J2EE 应用中,Java 代码经常不得不依赖于关系型数据库的聚合操作来完成诸如: 客户每月平均消费金额