并行处理

海量多边形矢量并行平滑实现

走远了吗. 提交于 2019-12-02 12:46:59
最近工作需要对提取的矢量图斑进行平滑(shp格式),所以就对这里进行了一点小小的研究,主要是对Chaikin-curve算法进行改进,其实还有很多优秀的算法可以拿来用,迫于时间,就没有继续深入, 这篇博客,权当是抛砖引玉,希望真正搞平滑算法的”同志们“,能够展示出自己真正的优秀算法。我们知道,当多边形数量为几百个,几千个,可能cpu串行和并行计算效率差距不大,但是当数量突破万个,几十万个,几百万个呢? 串行明显就不行了,所以我这里探索了并行矢量平滑算法。。。我在后面开源了代码,如果各位对代码有疑问或者需要理解的,qq:1044625113,备注:矢量并行处理 我计算了12万个多边形, 计算效率对比,如下表所示: 计算模式 计算时间(秒) 串行 70 并行(四核) 20 节省了整整三倍啊,兄弟们,这个很爽啊! 图 原始矢量图斑 图 平滑后矢量图斑 下面贴上矢量平滑的主函数代码: % chaikin-curve ???????????????? % written by Mr zhipan Wang,Email:1044625113@qq.com,BeiJing,2019-10-21 % refer:https://www.cnblogs.com/hongru/archive/2011/10/27/2226946.html clear tic %% read shape file

并发和并行的区别

爷,独闯天下 提交于 2019-12-02 09:23:40
并发和并行 并发(concurrency)和并行(parallellism): 解释一:并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。 解释二:并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。 解释三:并发是在一台处理器上“同时”处理多个任务,并行是在多台处理器上同时处理多个任务。如 hadoop 分布式集群。 所以并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。 并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行。所以无论从微观还是从宏观来看,二者都是一起执行的。 并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。 并行在多处理器系统中存在,而并发可以在单处理器和多处理器系统中都存在,并发能够在单处理器系统中存在是因为并发是并行的假象,并行要求程序能够同时执行多个操作,而并发只是要求程序假装同时执行多个操作(每个小时间片执行一个操作,多个操作快速切换执行)。 当有多个线程在操作时,如果系统只有一个 CPU,则它根本不可能真正同时进行一个以上的线程,它只能把 CPU 运行时间划分成若干个时间段,再将时间段分配给各个线程执行

思考:如何解决多次(二次以上)相同的网络调用的问题?

感情迁移 提交于 2019-12-01 19:28:43
思考:如何解决多次(二次以上)相同的网络调用的问题? 1.并行请求; 2.如果并行数目太多,并行请求也不是一个好方法,因为并行的话会依赖最慢的那个; 3.如果数据量小,可以把要请求的数据弄到本地缓存,不走网络调用; 4.上述方法都不行,就只能离线处理好数据,避免这种并行执行; 来源: https://www.cnblogs.com/big1987/p/11714426.html

云栖干货回顾 | 云原生数据库POLARDB专场“硬核”解析

心不动则不痛 提交于 2019-12-01 15:32:21
POLARDB是阿里巴巴自主研发的云原生关系型数据库,目前兼容三种数据库引擎:MySQL、PostgreSQL、Oracle。POLARDB的计算能力最高可扩展至1000核以上,存储容量可达100TB。 POLARDB融合了商业数据库稳定、可靠、高性能的特征,同时具有开源数据库简单、可扩展、高速迭代的优势,适合各个行业公司的创新业务使用。本专场中,来自阿里云、江娱互动以及猿辅导的各位技术大咖一起共同探讨了下一代云原生数据库POLARDB。 1、云原生数据库的演进方向和客户价值 阿里云智能数据库总经理曹伟为大家介绍了云原生数据库的演进方向以及阿里云POLARDB数据库的产品能力。 阿里云RDS和POLARDB都属于OLTP的关系性数据库,那就让我们先看下全球关系型数据库的市场情况。 如今,关系型数据库依旧是“老大哥”,但是过去的十年中关系型数据库领域也发生了一些微妙的变化。伴随着开源运动的兴起和MySQL、PostgreSQL等数据库的出现,很多用户开始在生产系统中大量使用开源数据库,因此商业数据库的市场受到了一定的挤压。 开源数据库的出现影响了整个数据库市场的格局和版图,也为阿里巴巴在数据库市场提供了一个重大的机会。经过十年的时间,阿里云数据库做到了“全国第一,全球领先”。当然,影响数据库格局的重要因素除了开源之外,还有云计算的兴起。 在云时代

[转载]并行与并发的区别

懵懂的女人 提交于 2019-12-01 06:19:36
[转载]并行与并发的区别 本文转载自https://laike9m.com/blog/huan-zai-yi-huo-bing-fa-he-bing-xing,61/,仅做个人学习使用,侵权请联系删除 “并发” 指的是程序的结构,“并行” 指的是程序运行时的状态 并行(parallelism) 这个概念很好理解。所谓并行,就是 同时执行 的意思,无需过度解读。判断程序是否处于并行的 状态 ,就看同一时刻是否有超过一个 “工作单位” 在运行就好了。所以, 单线程永远无法达到并行状态 。 要达到并行状态,最简单的就是利用多线程和多进程。但是 Python 的多线程由于存在著名的 GIL,无法让两个线程真正 “同时运行”,所以实际上是无法到达并行状态的。 并发(concurrency) 要理解 “并发” 这个概念,必须得清楚, 并发指的是程序的 “结构” 。当我们说这个程序是并发的,实际上,这句话应当表述成 “这个程序采用了支持并发的设计”。好,既然并发指的是人为设计的结构,那么怎样的程序结构才叫做支持并发的设计? 正确的并发设计的标准是:使多个操作可以在重叠的时间段内进行 (two tasks can start, run, and complete in overlapping time periods) 。 这句话的重点有两个。我们先看 “(操作)在重叠的时间段内进行” 这个概念

计算机体系结构

柔情痞子 提交于 2019-12-01 04:36:52
一、概述 计算机系统结构是计算机的 机器语言 程序员或编译程序编写者所看到的外特性。所谓外特性,就是计算机的概念性结构和功能特性,主要研究计算机系统的基本工作原理,以及在硬件、软件界面划分的权衡策略,建立完整的、系统的计算机软硬件整体概念。 1982年,梅尔斯定义了组成计算机系统的若干层次,每一层都提供了一定的功能支持他上面的一层,并把不同层的界面定义为某种类型的体系结构,即指令体系结构。 1984年,拜尔给出了更加广泛的定义:体系结构由结构,组织,实现,性能4个基本方面组成。其中: 结构:指计算机系统各种硬件的互连,是计算机的概念性结构和功能属性。 组织:指各部件的动态联系与管理,是计算机体系结构的逻辑实现,包括机器内的数据流和控制流的组成以及逻辑设计等。 实现:指各模块设计的组装完成,是计算机组织的物理实现。 性能:指计算机系统的行为表现。 二、计算机体系结构分类 1.宏观 按处理机的数量分类,分为单处理系统,并行处理与多处理系统和分布式处理系统。 (1)单处理系统:一个处理单元。 (2)并行处理与多处理系统:两个以上的处理机互连批次通信协调。 (3)分布式处理系统:指物理上远距离而松耦合的多计算机系统。如下图: 2.微观 按并行程度分类,有Flynn分类法,冯泽云分类法,Handler分类法和Kuck分类法。 (1)Flynn分类法:按指令流和数据流的多少进行分类

2.1.5 指令级并行【译】

僤鯓⒐⒋嵵緔 提交于 2019-12-01 02:05:25
计算机设计师致力于提升他们设计的机器的性能。提升时钟速度是让运行芯片更快的一种方法,但是任何新的设计都不得不受限于当时的历史环境。因此,大部分计算机体系结构在给定时钟速度的情况下,依靠并行(同时处理两件或以上的事务)来获得更多性能。 并行分为指令级并行和处理器级并行两种。前者的并行指的是运用内部独立指令来获取更多的指令输出。后者的并行指的是多个CPU同时运行来解决相同的问题。两种方案各有优势。在本节我们将研究指令级并行;下一节我们研究处理器级并行。 流水线 众所周知,从内存中读取指令这一过程是影响指令执行速度的一大瓶颈。为了缓和这个问题,老古董IBM Stretch(1959)能提前从内存中读取指令,这样当用到这些指令时,它们已经被读取过了。这些指令被存在一组特殊的寄存器中,它就是预取缓冲器。这样,当需要一个指令时,通常从缓冲器中取出而不是等待内存读取完成。 实际上,预取指令的执行可以分为两部分:读取和实际执行。流水线得概念更加深入的执行了这个策略。相比于仅仅被分成两部分,指令的执行通常被分为许多部分(十几个或更多),每个部分由专门的一块硬件处理,所有部分可以并行执行。 图2-4(a)表示一个五单元流水线。第一步从内存读取指令,然后把它放入缓冲区直到被取出。第二步对指令解码,获取指令类型和它需要的操作子。第三步定位并获取操作子,每个操作子都是从内存或寄存器中读取

初识Java8新特性Lambda(二) 之collections

给你一囗甜甜゛ 提交于 2019-11-30 21:58:19
背景(Background) 如果从一开始就将lambda表达式(闭包)作为Java语言的一部分,那么我们的Collections API肯定会与今天的外观有所不同。随着Java语言获得作为JSR 335一部分的lambda表达式,这具有使我们的Collections接口看起来更加过时的副作用。尽管可能很想从头开始并构建替换的Collection框架(“ Collections II”),但是替换Collection框架将是一项主要任务,因为Collections接口遍布JDK库。相反,我们将继续增加扩展方法,现有的接口(如进化策略Collection,List或Iterable),或者以新的接口(如“流”)被改装到现有的类,使许多希望的成语,而没有让人们买卖其值得信赖的ArrayListS和HashMap秒。(这并不是说Java永远不会有一个新的Collections框架;很明显,现有的Collections框架存在局限性,而不仅仅是为lambda设计的。除此以外,创建一个经过改进的Collections框架是一个很好的考虑因素。 JDK的未来版本。) 并行性是这项工作的重要推动力。因此,要鼓励那些成语是非常重要的两个 sequential-和并行友好。我们主要通过较少地关注就地突变而更多地关注产生新值的计算来实现这一目标

【iOS】Swift4.0 GCD的使用笔记

元气小坏坏 提交于 2019-11-30 17:49:43
https://www.jianshu.com/p/47e45367e524 前言 在Swift4.0版本中GCD的常用方法还是有比较大的改动,这里做个简单的整理汇总。 GCD的队列 队列是一种遵循先进先出(FIFO)原则的数据结构,是一种特殊的线性表。 主队列 全局队列 串行队列 并行队列 同步 X 并行同步 串行同步 并行同步 异步 串行异步 并行异步 串行异步 并行异步 X 表示禁止这么使用,—— 表示不建议这么使用。 1. 主队列 主队列默认是串行的,另外主队列不能结合同步函数( sync )使用,会造成线程死锁。 override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let mainQueue = DispatchQueue.main mainQueue.sync { print("造成当前线程:\(Thread.current)死锁") } } 同时主队列中不应该添加耗时的任务,因为系统的UI相关事务都是在主线程队列中完成的,大量大耗时操作可能会造成卡顿,应该避免。 主队列最常用的方法是当子线程需要通知主线程做一些UI上面的操作时,结合子线程使用: let queue =

线程,进程,多进程,多线程。并发,并行的区别与关系

半世苍凉 提交于 2019-11-30 16:42:02
一:线程与进程 1.概念 线程:是程序执行流的最小单元,是系统独立调度和分配 CPU(独立运行)的基本单位。 进程:是资源分配的基本单位。一个进程包括多个线程。 进程 ≥ 线程 2.区别: 1.线程与资源分配无关,它属于某一个进程,并与进程内的其他线程一起共享进程的资源。 2.每个进程都有自己一套独立的资源(数据),供其内的所有线程共享。 3.不论是大小,开销线程要更“轻量级” 4.一个进程内的线程通信比进程之间的通信更快速,有效。(因为共享变量) 二 .多线程与多进程 多线程:同一时刻执行多个线程。用浏览器一边下载,一边听歌,一边看视频,一边看网页。。。 多进程:同时执行多个程序。如,同事运行 YY,QQ,以及各种浏览器。 三 .并发与并行 并发当有多个线程在操作时 ,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。.这种方式我们称之为并发(Concurrent)。 并行:当系统有一个以上 CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。 以下为详细的概念的讲解 并发: 并发,在 操作系统 中