查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

0与1构筑世界,程序员创造时代

软件架构设计 Java编程

 
 
 
 
 
 

广东省 广州市 处女座

 发消息  写留言

 
职    业 高级软件工程师
专长技能软件架构设计、Java编程
兴趣爱好: 编程、旅游、电影、音乐
喜欢名人毛泽东、邓小平、 朱镕基
人生格言宝剑锋从磨砺出, 梅花香自苦寒来!
博客等级加载中...
今日访问加载中...
总访问量加载中...
最后登录加载中...
 
 
 
 
 
 
 
心情随笔列表加载中...
 
 
 
 
 
 
 
模块内容加载中...
 
 
 
 
 
 
 
 
 
 
 
网易云音乐 曲目表歌词秀
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

开源站点

 
 
模块内容加载中...
 
 
 
 
 
 
 
列表加载中...
 
 
 
 
 
 

我的个人网站

 
 
模块内容加载中...
 
 
 
 
 

免费/开源 软件

 
 
模块内容加载中...
 
 
 
 
 
 
 

多线程池执行异步任务

2014-3-31 21:34:34 阅读4619 评论13 312014/03 Mar31

在软件架构和设计中,会尽可能地将操作异步化,缩短响应时间,提升性能。

将异步任务放入线程池,这是许多人都知道的。但是当异步任务多了之后,如果全放在同一个线程池执行,会出现一些问题:

不同任务因其执行的操作不同,所需时间不同。如果有大量执行时间较久的异步任务,会阻塞那些执行非常快的异步任务,导致原本很快可以完成的异步任务也变慢。操作本地内容的异步任务和操作远程内容的异步任务。如果放在同一个线程池中,在网络出现故障的情况下,会出现大量的任务积压,导致执行本地内容的异步任务也受影响。

现实生活中,机动车行驶时,会根据行驶的速度划分超车道、快车道、慢车道和应急车道,避免速度慢的车辆阻塞速度快的车辆。

同理,将异步任务放入不同的线程池执行,就可以解决上面的两个问题。

threadpool4j是一个实现了多线程池的类库,使用方法如下:

1、获取threadpool4j源码。

git clone https://github.com/aofeng/threadpool4j

2、编译源码生成jar。

进入项目根目录,执行ant脚本:

ant

会生成一个dist目录,下面有两个文件。如:

threadpool4j-1.0.0-src.jar 源码jar threadpool4j-1.0.0.jar 用于发布的二进制jar

它的依赖类库在lib目录下。有common4j-.jar,log4j-1..jar。

作者  | 2014-3-31 21:34:34 | 阅读(4619) |评论(13) | 阅读全文>>

在JVM中编译脚本提升运行性能

2013-12-12 17:21:44 阅读773 评论0 122013/12 Dec12

JDK6增加了一个重要的特性,实现JSR 223规范支持脚本语言,使得Java可以通过脚本引擎执行JavaScript,Python等脚本语言代码。JDK6包含了一个基于Mozilla Rhino的 脚本语言引擎,支持JavaScript。其他的脚本语言可以按JSR 223规范实现脚本引擎,JDK中有一个ScriptEngineManager类,它可以通过jar服务发现(Service Discovery)机制寻找合适的脚本引擎类(ScriptEngine)。

脚本语言给人第一印象,它是逐行解释执行的,但JSR 223规范定义了脚本两种不同的运行方式:

解释运行。先编译,后运行。

是否支持编译功能,由具体的脚本引擎决定。JDK6自带的JavaScript引擎同时支持解释运行和编译运行两种方式,下面就对比这两种方式下脚本运行的性能。

代码

完整的源代码

1、解释运行。关键代码如下:

public void parse(String script, Map<String, Object> vars) throws ScriptException {

作者  | 2013-12-12 17:21:44 | 阅读(773) |评论(0) | 阅读全文>>

Java网络处理模型-非阻塞I/O+单线程

2013-10-26 21:24:53 阅读3404 评论2 262013/10 Oct26

"阻塞I/O+线程池"网络模型虽然比"阻塞I/O+多线程"网络模型在性能方面有提升,但这两种模型都存在一个共同的问题:面对大并发(持续大量连接同时请求)的场景,需要消耗大量的线程维持连接。CPU在大量的线程之间频繁切换,性能损耗很大。一旦单机的连接超过1万,甚至达到几万的时候,服务器的性能会急剧下降。

而NIO的Selector却很好地解决了这个问题,用“一个线程或者是CPU个数的线程”(主线程)hold住所有的连接,管理和读取客户端连接的数据,将读取的数据交给后面的线程池处理,线程池处理完业务逻辑后,将结果交给主线程发送响应给客户端,少量的线程就可以处理大量连接的请求。

单个线程hold住所有连接并处理请求和响应

代码示例

示例代码只实现一个线程负责所有的事务:接收请求,解析请求,业务逻辑处理,响应数据封闭,发送响应。

NioEchoServer.java 源代码:

package cn.aofeng.demo.nio;

import java.io.IOException;

作者  | 2013-10-26 21:24:53 | 阅读(3404) |评论(2) | 阅读全文>>

Java网络处理模型-阻塞I/O+线程池

2013-10-24 21:24:46 阅读1532 评论0 242013/10 Oct24

"阻塞I/O+线程池"网络模型是"阻塞I/O+多线程"网络模型的改进版,人们意识到每次有新连接创建和销毁线程的代价太大,就用线程池来解决这个问题:每次接收到新连接后从池中取一个空闲线程进行处理,处理完成后再放回池中,重用线程避免了频率地创建和销毁线程带来的开销。

和"阻塞I/O+多线程"相比,在大量短连接的场景中性能会有提升,因为不用每次都创建和销毁线程,而是重用连接池中的线程。但在大量长连接的场景中,因为线程被连接长期占用,不需要频繁地创建和销毁线程,因而没有什么优势。

代码示例

ThreadPoolEchoServer.java 源代码:

package cn.aofeng.demo.io;

import java.io.IOException;

import java.net.InetSocketAddress;

作者  | 2013-10-24 21:24:46 | 阅读(1532) |评论(0) | 阅读全文>>

Java实现在控制终端显示的字符进度条

2013-7-27 15:05:11 阅读5140 评论11 272013/07 July27

前言面向用户使用的程序都会考虑响应性,如:上传、下载文件会显示已经完成百分之多少,方便用户了解处理的进度。在Swing和AWT编写的应用有现成的进度条控件可用,但对于非界面程序就需要自己实现了。

花了点时间写了一个类似于wget的字符进度条,可用于在Linux的命令终端和Windows的命令窗口中实时显示任务处理的进度。

原理:

在每次显示进度条时将光标定位回当前行的最左边,输出当前的进度条覆盖旧的进度条。

特点:

在一行中实时显示进度和百分比,类似于wget的进度条

已知存在的问题:

1、在Eclipse的控制台显示不正常,每次刷新进度条时会换行。

2、当进度条的长度超过控制终端的显示区域时,每次刷新进度条时会换行。

进度条代码

package cn.aofeng.util;

import java.text.DecimalFormat;

/**

 * 控制台字符型进度条。

 * 

 * @author 傲风 <aofengblog@163.com>

 */

public class ConsoleProgressBar {

private long minimum = 0; // 进度条起始值

作者  | 2013-7-27 15:05:11 | 阅读(5140) |评论(11) | 阅读全文>>

在Redhat/Centos上安装和配置TortoiseHg和kdiff3

2013-5-31 20:26:51 阅读2342 评论0 312013/05 May31

这是两年前写的一篇文章(已经有同学转载在CSDN上),当时身边的一些同学在安装TortoiseHg和kdiff3时碰到了不少软件的版本和依赖问题,导致无法顺利安装下去。因此,特分享我安装这些软件的完整过程,希望对大家有帮助。

Mercurial(HG)的安装和使用入门可参考我的另一篇文章在RedHat/CentOS中安装Mercurial(HG)

一、环境和准备工作

1、操作系统:Redhat5 / Centos5

2、需要准备的软件及其版本(都是通过源代码编译进行安装):

Python2.7 (Redhat5和Centos5上默认安装的Python为2.4版本,请升级至2.7。升级Python后,重新编译安装mercurial-1.9)qt-4.7.3kdiff3-0.9.95QScintilla-gpl-2.5.1iniparse-0.4sip-4.12.4PyQt-x11-gpl-4.8.5tortoisehg-2.1它们的依赖关系如下图所示:

二、安装QT4

1、下载源代码:

wget http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.7.3.tar.gz

2、解压源代码包:

作者  | 2013-5-31 20:26:51 | 阅读(2342) |评论(0) | 阅读全文>>

在RedHat/CentOS中安装Mercurial(HG)

2013-5-30 20:36:13 阅读8752 评论0 302013/05 May30

上次在RedHat中安装Mercurial(HG)已经是两年前的事情了,这两天协助测试组的同学搭建自动化测试环境,顺便整理了一下安装过程。安装非常简单,看一下README文件和Makefile脚本就可以了。

环境

RedHat-5.x / CentOS-5

Python2.4~2.7

Mercurial(HG)1.9 ~ 2.6.1

说明:RedHat-5中已经预装了Python2.4。

安装Mercurial(HG)

1、下载Mercurial源码。

wget http://mercurial.selenic.com/release/mercurial-2.6.1.tar.gz

2、解压。

tar -zxvf mercurial-2.6.1.tar.gz

3、修改Makefile

vi Makefile

找到PREFIX=/usr/local,将其中的/usr/local改成实际的安装目录。

4、编译安装

作者  | 2013-5-30 20:36:13 | 阅读(8752) |评论(0) | 阅读全文>>

PHP - XHProf简明教程

2013-5-18 18:38:35 阅读4559 评论0 182013/05 May18

之前用PHP做互联网SNS应用,会定期进行性能分析,找出消耗时间最多的地方。通过对几款工具进行试验和对比后,采用了XHProf。XHProf是Facebook的开源项目,用于分析PHP应用运行性能的轻量级工具,开销很低,可以用在生产环境中。

一些新加入团队的同学,对XHProf不熟悉,因此业余时间编写了一个简明的教程,包括如何部署XHProf和读懂XHProf报告。

说明

$PHP_HOME 表示PHP的安装目录。

$XHPROF_UI_HOME 表示xhprof ui的存放目录(自己选择一个目录即可,如:/home/nieyong/xhprof_ui)。

注:命令行和配置文件中如果包含上述两个变量需替换成实际的路径。

XHProf安装

1、下载XHProf源码并解压。

wget http://pecl.php.net/get/xhprof-0.9.2.tgz tar zxvf xhprof-0.9.2.tgz

2、编译前预处理。

cd xhprof-0.9.2/extension/ $PHP_HOME/bin/phpize

3、编译三步曲。

./configure --with-php-config=$PHP_HOME/bin/php-config make make install

4、增加PHP配置。

vi $PHP_HOME/lib/php.ini

作者  | 2013-5-18 18:38:35 | 阅读(4559) |评论(0) | 阅读全文>>

Linux - iostat命令详解

2013-4-13 21:38:11 阅读4571 评论0 132013/04 Apr13

近期在排查生产环境故障时要用到vmstat, iostat, sar, top, tcpdump等命令,以前时不时用到它们,但都没有形成一个完整的文档 ,以致在用到时还需要查一些资料。这篇文章主要说明iostat命令。

iostat命令有两个用途:

输出CPU的统计信息输出设备和分区的I/O统计信息

环境 | Enviroment

RedHat-5.7 64bit

命令语法及参数说明 | Syntax And Paramenter Description

语法:

iostat [ -c | -d ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -n ] [ -h ] [ device [ ... ] | ALL ] [ -p [ device | ALL ] ] [ interval [count ] ]

参数说明:

 参数 描述  -c

作者  | 2013-4-13 21:38:11 | 阅读(4571) |评论(0) | 阅读全文>>

Linux - vmstat命令详解

2013-4-12 20:06:59 阅读1373 评论2 122013/04 Apr12

近期在排查生产环境故障时要用到vmstat, iostat, sar, top, tcpdump等命令,以前时不时用到它们,但都没有形成一个完整的文档 ,以致在用到时还需要查一些资料。这篇文章主要说明vmstat命令。

vmstat命令用于输出虚拟内存的统计信息。

环境 | Enviroment

RedHat-5.7 64bit

命令语法及参数说明 | Syntax And Paramenter Description

语法:

vmstat [-V] [-n] [delay [count]]

参数说明:

参数 描述  -V  prints version. 显示vmstat版本信息。  -n  causes the headers not to be reprinted regularly. 只在第一次显示数据时在顶部显示各字段名称,后面不再显示各字段名称。  -a  print inactive/active page stats. 显示活跃和非活跃内存。  -d  prints disk statistics. 显示磁盘统计信息。  -D  prints disk table  -p  prints disk partition statistics. 显示指定磁盘分区统计信息。

作者  | 2013-4-12 20:06:59 | 阅读(1373) |评论(2) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 
 
日志评论
评论列表加载中...
 
 
 
 
 
博友列表加载中...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018

注册 登录  
 加关注