parallel

JVM GC参数以及GC算法的应用

萝らか妹 提交于 2021-02-13 07:42:38
之前一篇 Blog 已经将GC的机制以及GC的算法讲了一下。 而这篇Blog主要是讨论这些GC的算法在JVM中的不同应用。 1. 串行收集器 串行收集器是 最古老,最稳定以及 效率高的收集器 可能会产生较长的停顿, 只使用一个线程去回收 -XX:+UseSerialGC 新生代、老年代使用串行回收 新生代复制算法 老年代标记-压缩 串行收集器的日志输出: 0.844: [GC 0.844: [DefNew: 17472K->2176K(19648K), 0.0188339 secs] 17472K->2375K(63360K), 0.0189186 secs] [Times: user=0.01 sys=0.00, real=0.02 secs] 8.259: [Full GC 8.259: [Tenured: 43711K->40302K(43712K), 0.2960477 secs] 63350K->40302K(63360K), [Perm : 17836K->17836K(32768K)], 0.2961554 secs] [Times: user=0.28 sys=0.02, real=0.30 secs] 2. 并行收集器 2.1 ParNew -XX:+UseParNewGC(new代表新生代,所以适用于新生代) 新生代并行 老年代串行

RxJava(ReactiveX,Observable)的一些大白话

女生的网名这么多〃 提交于 2019-12-09 10:20:53
一部分人压根就没想过Publisher和Subscriber的代码分别在什么线程里执行, 做Android的人天然会意识到这个,因为很多例子里都会写subScribeOn(Schedulers.io())和observeOn(AndroidSchedulers.mainThread()),所以没问题。 做了个测试工程 RxJava_Test 。代码都是在 RxJava_Test.java 里。 得到几个大白话的结论,可不容易在reactivex的文档里明确找到。 文档里那一堆花花绿绿的图真的能够给人信心吗?虽说画的很有道理,连thread的颜色都有区别,可总不容大白话好啊。 1. 线程指定 如果subscribeOn和observeOn都不指定,那么所有的动作都在当前线程里顺序执行。他们的作用分别是指定了Publisher和Subscriber的动作在什么thread里执行。 subscribeOn(scheduler) 这个函数名字取得真不合适,让人误以为subscriber的回调函数执行在指定的thread里,实际上是指定了Publisher代码执行在指定的thread里。 非要抬杠的话,由于后续的subscriber默认就的确被调用在该thread里,而且publisher的动作实际是在OnSubscibe callback里才被执行的,所以这个函数名马马虎虎说得过去,但是

自己动手写压力测试-三剑客HttpClient+Async+Parallel

瘦欲@ 提交于 2019-12-05 04:20:40
曾经沧海难为水 信息如水 压力如潮 功能实现阶段,我们对得要处理的信息分析得很细致,很透彻,所谓细如丝,透如水。然而,到了产品的阶段,要处理的信息却如同潮洪而至,原本的假设预想,通通被击成了碎片。这时候产生的错误和问题,很难在开发机上重现。 如果说用户验收测试是对功能实现的检查,需要滴水不漏;压力测试则是容量的考验,迎接浪的洗礼。 (本文版权属于© 2012 - 2013 予沁安 ) 环肥燕瘦 压力测试的工具颇多,尤其是HP的LoadRunner甚至成为了行业标准。可是,在研究和考察的过程中,心里却慢慢有了质疑,我是否非得用这些工具吗? 一则,它们是商业软件,价格不菲;二则,还是因为是商业软件,功能太多,太庞大,很多东西我都不需要。为什么不自己做一个简单实用的呢? 在 小赵研究Selenium 时,我觉得用他用的语法很贴近业务语言,于是我提出一个问题,可以用于压力测试吗?他说不行,因为Selenium是要完全启动浏览器。平时,看起来瘦小的浏览器,其实很耗资源,特别是与压力测试的容量来比,浏览器是个不折不扣的大胖子。你可以试一下,在你的机器上同时开启100个浏览窗口,会是个什么状况。 苗条美人 HttpClient 否定了Selenium之后,很快就找到了我的目标HttpClient (其实还有个前生WebClient,后面有叙)。从名称,我们就可以知道,它已经定位到很低Http层

create table as及并行相关问题

拥有回忆 提交于 2019-12-04 19:44:04
工作中设计到更新多张千万级数据量的表,需要先统计相关信息,再将信息更新到表中,更新操作需要几个小时才能执行完成。 调整思路为,先统计相关信息到中间表中C,用业务表A和C联查,用create table as方式创建表B,删除A表相关索引、主外键,创建B表索引,主外键,将A表rename为备份表,将B表rename为A。 期间考虑过用Insert into select方式,比较效率后采用create as方式。create table as是ddl语句,insert into select是dml语句,insert into select每一条记录的时候都会产生undo和redo,整个过程相比create table as产生的redo和undo相当多,因此整个过程会慢也是正常的;但是create table as使用的前提是目标表的结构不存在才能使用;当有大量数据的时候不推荐使用Insert into as,因为该语句的插入的效率很慢; 最后增加并行,用create table B parallel (degree default) AS方式创建,8千万的数据可以在3分钟内执行完成,还要注意创建完表之后需要关闭该表的并行,不关闭并行可能 引起执行计划错误,查询效率出现问题。 在生产环境执行过程中发现问题:ORA-12805: parallel query server died

并行处理框架Celery的Web监控管理服务-Flower

三世轮回 提交于 2019-12-01 05:08:32
Flower: Real-time Celery web-monitor Flower是Celery的一个实时监控和管理Web界面工具,目前仍在活跃的开发之中,但已经是一个很重要的可用工具了。这是推荐使用的Celery监控工具,原来的基于Django-Admin monitor、celerymon、ncurses的监控管理已经过时。 Flower在快速的开发和变化之中, 你也可以得到相对稳定的版本。 Features 使用Celery Events进行实时监视 Task进度和历史。 显示task详细信息 (参数,启动时间,运行时间,其它...) 统计数据和图形表示。 远程控制 查看worker状态和统计信息。 关闭和重启worker实例。 控制worker池的大小和自动伸缩的设置。 查看和修改worker实例消费的队列。 查看当前运行的任务。 查看 tasks的调度 (ETA/countdown)。 查看保留和重新唤醒的tasks。 应用实践和频度限制。 配置的查看。 唤醒和终止tasks。 HTTP的 API接口。 OpenID鉴权方法。 运行的截屏: More screenshots : 安装和使用 使用pip安装Flower: $ pip install flower #如果没有pip,使用sudo apt-get install python-pip进行安装。 运行

java8 lambda表达式与集合类批处理操作

瘦欲@ 提交于 2019-11-30 05:25:54
一、基本概念 λ表达式可以被当做是一个Object。λ表达式的类型,叫做“目标类型(target type)”。λ表达式的目标类型是“函数接口(functional interface)”,这是Java8新引入的概念。它的定义是:一个接口,如果只有一个显式声明的抽象方法,那么它就是一个函数接口。一般用@FunctionalInterface标注出来(也可以不标) 。 @FunctionalInterface public interface Runnable { void run(); } public interface Callable<V> { V call() throws Exception; } public interface ActionListener { void actionPerformed(ActionEvent e); } public interface Comparator<T> { int compare(T o1, T o2); boolean equals(Object obj); } 注意最后这个Comparator接口。它里面声明了两个方法,貌似不符合函数接口的定义,但它的确是函数接口。这是因为equals方法是Object的,所有的接口都会声明Object的public方法——虽然大多是隐式的。所以

基于Celery的并行处理工程-OpenWorker快速安装

纵饮孤独 提交于 2019-11-29 23:49:08
Celery 是一个简单灵活的Python并行处理框架,但是相关的几个工程需要独自安装和配置,给小白的使用带来困难。 OpenWorker是基于Python的并行处理框架,将集成Celery、Flower、Jobtastic和Rodeo工程,可以通过控制台或Web进行管理、提交任务等。 OpenWorker将这几个工程放到一起, 并增加了统一的安装脚本,让部署和安装、运行都更加方便。OpenWorker仅仅集成这些资源让数据研究者更易于使用,而不是替代原来的工程。由于这几个项目还在快速发展,因此也编写合并和更新的脚本,实现与原作者的代码库保持一致。 1、并行处理框架:Celery, http://www.celeryproject.org/ 执行任务的分发和调度,使用消息总线进行通讯。 关于Celery的入门教程及参考: http://my.oschina.net/u/2306127/blog/420833 2、Web管理控制台:Flower, https://github.com/mher/flower 在远程通过Web界面监视和管理任务执行情况。 3、任务进度通知:Jobtastic, http://policystat.github.io/jobtastic/ 为长时间运行的任务提供进度通知的Celery扩展库。 4、Web上Python控制台: Rodeo: https:/