并行处理

JAVA8之lambda表达式详解及使用

无人久伴 提交于 2020-01-03 17:24:21
原文:https://blog.csdn.net/jinzhencs/article/details/50748202 lambda表达式详解 一.问题 1.什么是lambda表达式? 2.lambda表达式用来干什么的? 3.lambda表达式的优缺点? 4.lambda表达式的使用场景? 5.lambda只是一个语法糖吗? 二.概念 lambda表达式是JAVA8中提供的一种新的特性,它支持JAVA也能进行简单的“函数式编程”。 它是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。 三.先看看效果 先看几个例子: 1.使用lambda表达式实现Runnable package com.lambda; /** * 使用lambda表达式替换Runnable匿名内部类 * @author MingChenchen * */ public class RunableTest { /** * 普通的Runnable */ public static void runSomeThing(){ Runnable runnable = new Runnable() { @Override public void run() { System.out.println("I am

SparkStreaming2.2 + Kafka0.8

痞子三分冷 提交于 2020-01-01 23:08:03
SparkStreaming2.2(包含以前版本)+Kafka0.8 1. receiver模式 (不管需不需要都会传输数据) receiver模式原理图 receiver模式流程: 在SparkStreaming程序运行起来后,Executor中会有receiver task接收kafka推送过来的数据。数据会被持久化,默认级别为MEMORY_AND_DISK_SER_2,这个级别也可以修改。 receiver task对接收过来的数据进行存储和备份,这个过程会有节点之间的数据传输。(此时开启了WAL也会备份到HDFS上) 备份完成后去zookeeper中更新消费偏移量offset, 然后向Driver中的receiver tracker汇报数据的位置。 最后Driver根据数据本地化将task分发到不同节点上执行。 receiver模式中存在的问题 数据丢失问题 当 Driver进程挂掉后,Driver中的Executor进程都会被杀掉,若此时任务未计算完,会造成数据找不到的问题,相当于数据丢失. 解决 :开启 WAL(write ahead log)预写日志机制 ,在数据进行备份的时候会在hdfs上备份一份,这样就保证了数据的安全性,但是HDFS写入比较消耗性能,需要在数据备份完成之后才能进行zookeeper偏移量更新,位置汇报等等,会增加任务执行时间

MySQL5.7的组提交与并行复制

非 Y 不嫁゛ 提交于 2020-01-01 03:16:02
从MySQL5.5版本以后,开始引入并行复制的机制,是MySQL的一个非常重要的特性。 MySQL5.6开始支持以schema为维度的并行复制,即如果binlog row event操作的是不同的schema的对象,在确定没有DDL和foreign key依赖的情况下,就可以实现并行复制。 社区也有引入以表为维度或者以记录为维度的并行复制的版本,不管是schema,table或者record,都是建立在备库slave实时解析row格式的event进行判断,保证没有冲突的情况下,进行分发来实现并行。 MySQL5.7的并行复制,multi-threaded slave即MTS,期望最大化还原主库的并行度,实现方式是在binlog event中增加必要的信息,以便slave节点根据这些信息实现并行复制。 MySQL 5.7的并行复制建立在group commit的基础上,所有在主库上能够完成prepared的语句表示没有数据冲突,就可以在slave节点并行复制。 关于MySQL5.7的组提交,我们要看下以下的参数: mysql> show global variables like '%group_commit%'; +-----------------------------------------+-------+ | Variable_name | Value | +------

Visual C++ 11 中新的并发功能

岁酱吖の 提交于 2020-01-01 02:47:12
最新的 C++ 迭代(称为 C++11,在去年通过了国际标准化组织 (ISO) 的审批)形式化了一组新库和一些保留字以处理并发。 许多开发者以前都在 C++ 中使用过并发功能,但都是通过第三方的库,即,通常直接公开 OS API。 Herb Sutter 在 2004 年 12 月宣告“免费的性能午餐”结束,因为禁止 CPU 制造商通过物理能耗和增加碳排放量来生产更快的 CPU。 由此进入了当前主流的多核时代,一种新的实现,而 C++(标准组件)为适应此类变化取得了重要的飞跃。 本文下面的内容将分成两节,另外还有一些小节。 第一节,从并行执行开始,介绍允许应用程序并行运行独立或半独立活动的技术。 第二节,从同步并发执行开始,探讨同步机制,这些活动通过同步方式处理数据,以避免出现争用情况。 本文基于即将推出的 Visual C++ 版本(现在称为 Visual C++ 11)中包括的功能。 当前版本 (Visual C++ 2010) 中已提供其中部分功能。 尽管本文不提供关于为并行算法建模的指南,也不提供关于所有可用选项的详尽文档,但却全面介绍了新的 C++11 并发功能,内容丰富详实。 并行执行 当您对数据建模和设计算法时,很自然地就会按照具有一定顺序的步骤指定这些建模和设计过程。 只要性能位于可接受的范围内,这就是最值得推荐的方案,因为它通常更易于理解,而这符合维护代码的要求。

Visual C++ 11 中新的并发功能

£可爱£侵袭症+ 提交于 2020-01-01 02:44:36
最新的 C++ 迭代(称为 C++11,在去年通过了国际标准化组织 (ISO) 的审批)形式化了一组新库和一些保留字以处理并发。 许多开发者以前都在 C++ 中使用过并发功能,但都是通过第三方的库,即,通常直接公开 OS API。 Herb Sutter 在 2004 年 12 月宣告“免费的性能午餐”结束,因为禁止 CPU 制造商通过物理能耗和增加碳排放量来生产更快的 CPU。 由此进入了当前主流的多核时代,一种新的实现,而 C++(标准组件)为适应此类变化取得了重要的飞跃。 本文下面的内容将分成两节,另外还有一些小节。 第一节,从并行执行开始,介绍允许应用程序并行运行独立或半独立活动的技术。 第二节,从同步并发执行开始,探讨同步机制,这些活动通过同步方式处理数据,以避免出现争用情况。 本文基于即将推出的 Visual C++ 版本(现在称为 Visual C++ 11)中包括的功能。 当前版本 (Visual C++ 2010) 中已提供其中部分功能。 尽管本文不提供关于为并行算法建模的指南,也不提供关于所有可用选项的详尽文档,但却全面介绍了新的 C++11 并发功能,内容丰富详实。 并行执行 当您对数据建模和设计算法时,很自然地就会按照具有一定顺序的步骤指定这些建模和设计过程。 只要性能位于可接受的范围内,这就是最值得推荐的方案,因为它通常更易于理解,而这符合维护代码的要求。

Python并行处理视频帧

好久不见. 提交于 2019-12-31 13:07:10
参考链接: Speedy Computer Vision Pipelines using Parallelism 方案: 使用Python多进程编程,将视频分成多个小段,可按照CPU核数num_processes = multiprocessing.cpu_count()等分帧数。 通过cv2.CAP_PROP_FRAME_COUNT可以得到视频的总帧数(不准确),然后得到每一段视频的帧数大约为FRAMES_PER_SEG = cv2.CAP_PROP_FRAME_COUNT // multiprocessing.cpu_count()。 通过cv2.CAP_PROP_POS_FRAMES可以设置每一小段视频开始读取的起始帧位置:video.set(cv2.CAP_PROP_POS_FRAMES, seg_count * FRAMES_PER_SEG). 使用进程池multiprocessing.Pool(num_processes) 测试 测试视频:分辨率 800x450, 时长:00:01:56.40, FPS: 25, 总帧数:2908 常规操作:将视频存储为逐帧图片 import os import sys import time import cv2 import argparse def process_video ( input , output ) : if not

MySQL的并行复制策略

跟風遠走 提交于 2019-12-28 16:02:28
文章目录 按表分发策略 按行分发策略 MySQL5.6 的并行复制 MariaDB 的并行复制 MySQL5.7 的并行复制 MySQL5.7.22 的并行复制 前面介绍的MySQL 的主从复制流程如下所示: 主备延迟的主要原因在于,master A 上产生 binlog 的速度大于slave B 处理 binlog 的速度。数据的积压就在于 sql_thread 处理的速度。在 MySQL 5.6 版本之前,只支持单线程复制。单线程的 binlog 复制,在高并发的场景下会出现严重的主从不一致。要解决这个问题,就需要将上面的 sql_thread 拆解成为多个线程处理。 上图中的 coordinate 就是本文开始的 sql_thread,具体执行 binlog 复制的是 Worker。生产上,Worker 的个数设置为 8-16 个比较合适(32核CPU),因为从库还需要可能还需要处理读的请求。 对于 coordinate 的分发策略,并不能是随机的,因为这样对于SQL 执行不同的顺序,可能会产生不同的结果。此时对于 coordinate 的分发策略要求如下: 不能造成更新覆盖,同一行的更新必须被分发到同一个Worker 中; 同一个事务不能被拆开,必须被分配到同一个Worker 中。 按表分发策略 按表分发的基本思路是,如果两个事务更新不同的表,就可以并行处理。此时因为在不同

高性能计算如何高效进行并行操作?

倖福魔咒の 提交于 2019-12-27 19:05:01
当今数据驱动的世界,高性能计算(HPC)成为企业的首选平台。转向云计算,提供按需的HPC具有成本效益与高度灵活性。 高性能计算通常是指以比提供更高性能的方式聚合计算能力的实践。它可以高效进行并行操作,在计算过程中,各节点协同工作。 基于并行任务的角度对高性能计算进行分类,可以分为两类:高吞吐计算和分布式云计算。 高吞吐计算 高吞吐计算可以把一个任务分成若干可以并行的子任务,而且各个子任务彼此间没有什么关联。这种类型应用的一个共同特征是在海量数据上搜索某些特定模式。所谓的Internet计算都属于这一类。 高吞吐计算属于SIMD(Single Instruction/Multiple Data,单指令流-多数据流)的范畴。 分布式云计算 分布式云计算解决任务分发,并进行计算结果的合并,帮助应付本地业务交互的轻量化需求。 其将单个问题划分为多个部分,每个部分由不同的计算机解决,只要计算机联网,它们就可以相互通信进行大量数据交换以解决问题。如果操作正确,则计算机将像单个实体一样运行。 分布式云计算的最终目标是通过以经济高效、透明和可靠的方式连接用户和IT资源来最大化性能。它还可确保容错能力,并在其中一个组件发生故障时启用资源可访问性。 使用分布式云计算带来的优势 1)可扩展性和模块化增长 分布式系统固有的可扩展性,因为它们可以跨不同的机器工作并可以水平扩展

线程 Z

为君一笑 提交于 2019-12-21 05:03:14
原文: http://www.albahari.com/threading/part5.aspx 专题: C#中的多线程 1并行编程 Permalink 在这一部分,我们讨论 Framework 4.0 加入的多线程 API,它们可以充分利用多核处理器。 并行 LINQ(Parallel LINQ)或称为 PLINQ Parallel 类 任务并行(task parallelism) 构造 SpinLock 和 SpinWait 这些 API 可以统称为 PFX(Parallel Framework,并行框架)。 Parallel 类与 任务并行构造 一起被称为 TPL(Task Parallel Library,任务并行库)。 Framework 4.0 也增加了一些更底层的线程构造,它们针对传统的多线程。我们之前讲过的: 低延迟信号构造 ( SemaphoreSlim 、 ManualResetEventSlim 、 CountdownEvent 以及 Barrier ) 取消标记(cancellation token) ,以便于协作取消 延迟初始化 ThreadLocal<T> 在继续阅读前,你需要了解第 1 部分 - 第 4 部分中的基本原理,特别是 锁 和 线程安全 。 并行编程这一部分提供的所有代码都可以在 LINQPad 中试验。LINQPad 是一个 C#

openMP的一点使用经验

﹥>﹥吖頭↗ 提交于 2019-12-20 00:42:35
最近在看多核编程。简单来说,由于现在电脑CPU一般都有两个核,4核与8核的CPU也逐渐走入了寻常百姓家,传统的单线程编程方式难以发挥多核CPU的强大功能,于是多核编程应运而生。按照我的理解,多核编程可以认为是对多线程编程做了一定程度的抽象,提供一些简单的API,使得用户不必花费太多精力来了解多线程的底层知识,从而提高编程效率。这两天关注的多核编程的工具包括openMP和TBB。按照目前网上的讨论,TBB风头要盖过openMP,比如openCV过去是使用openMP的,但从2.3版本开始抛弃openMP,转向TBB。但我试下来,TBB还是比较复杂的,相比之下,openMP则非常容易上手。因为精力和时间有限,没办法花费太多时间去学习TBB,就在这里分享下这两天学到的openMP的一点知识,和大家共同讨论。 openMP支持的编程语言包括C语言、C++和Fortran,支持OpenMP的编译器包括Sun Studio,Intel Compiler,Microsoft Visual Studio,GCC。我使用的是Microsoft Visual Studio 2008,CPU为Intel i5 四核,首先讲一下在Microsoft Visual Studio 2008上openMP的配置。非常简单,总共分2步: (1) 新建一个工程。这个不再多讲。 (2) 建立工程后,点击 菜单栏-