自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 Storm中Topology任务调度策略

Storm中负责Topo分配的工作由nimbus负责,具体代码在nimbus.clj中。对于一个新Topo的分配来说,主要经历两个阶段:1. 逻辑分配阶段这里又会涉及到两个概念executor和task,简单讲对于一个具体的component来说,task就是component在运行时的实例个数,即component使静态的class代码,task是运行时的具体object对象,tas

2014-03-30 14:57:33 3961

原创 linux下文件特殊字符处理

在windows下编辑的文件,放到linux下执行经常会出现各种莫名其妙的问题,用vim打开查看文件,会看到一些特殊字符,常见的有1. ^M 该字符出现在一行文本的结尾,出现的原因是windows使用CR(回车\r)LF(换行\t)两个字符来作为一行文本的结束符号,而linux下是使用LF单个字符作为单行文本结束,因此在windows下编辑过的文本中如果使用过回车来换行,在linux下就会

2014-02-18 13:10:42 2573

转载 Big Data : Analysis of problems with traditional architecture

The Big Data techniques you are going to learn will address these scalabilityand complexity issues in dramatic fashion. First of all, the databases andcomputation systems you use for Big Data are

2014-02-09 01:34:59 945

原创 Storm Transactional Batch Process原理

Storm中实现实时批处理的模块由IBatchBolt, BatchBoltExecutor, CoordinatedBolt等数据结构实现,它们之间的关系如图所示:Storm实现事物批处理是通过在普通的IBatchBolt外面包装一层CoordinatedBolt,通过CoordinatedBolt实现批次和批次之间的事务性协调,其中记录批次元数据的神秘数据结构就是TrackingI

2014-01-11 20:17:52 1218

原创 Maven中配置默认JDK版本

在Maven的配置文件settings.xml中添加如下配置即可 jdk-1.6 true 1.6

2013-12-04 16:13:03 2300

原创 clojure语法小记

1. & varparam相当于java中的可变参数, eg (defmacro defserverfn [name & body] ...), body表示其余的一个或者多个参数。 2. (list 1 2 3)(1 2 3) 创建一个新列表。 3. unquote`(1 2 ~(list 3 4))   =>  (1 2 (3 4)) 对表达进行evaluate操作

2013-12-02 17:13:42 2026

原创 Maven Archetype模板工程构建步骤

1. 进入即将成为模板的maven工程根目录cd ${project_root_dir}  2. 通过该工程生成模板工程原型mvn archetype:create-from-project3. 生成的模板工程原型位于原工程根目录下的target/generated-sources/archetype目录cd ${project_root_dir}/target/generat

2013-11-12 15:05:21 1782

原创 Storm Component多语言支持剖析

Storm Component的多语言支持是通过父子线程实现通信,通信格式为JSON。下面看一个小例子,父子进程都是Java语言:// 父进程,语言为Javapublic class ParentProcess { // 子进程 Process subProcess; public void run() throws IOException, Interrupt

2013-10-09 16:04:06 1425

翻译 Software Memory Management

STM - 软件事务式内存是用于协调多个并发修改操作的手段,这些操作并发修改一个保存存储位置的共享集合。在其他语言中实现同样的功能,需要你主动承担起锁的管理工作,以及随之可能引发的种种问题。而STM为你提供了另一种选择。就像自动垃圾收集机制极大的代替了手动内存管理,从而消除了这种各样的手动内存管理所带来的bug一样,STM提供了自动锁管理,从系统上降低了程序的易错性。不论自动垃圾收集还是自

2013-06-27 15:01:26 522

转载 Storm中Worker, Executor, Task的概念

全文地址:https://github.com/nathanmarz/storm/wiki/Understanding-the-parallelism-of-a-Storm-topologyStorm distinguishes between the following three main entities that are used to actually run a topol

2013-05-16 15:04:13 1305 1

转载 Storm中Stream的Tuple的几种分发方式

全文地址:https://github.com/nathanmarz/storm/wiki/ConceptsStream groupingsPart of defining a topology is specifying for each bolt which streams it should receive as input. A stream grouping defines

2013-05-16 13:37:20 1412

原创 Storm安装问题总结

安装Storm需要一些依赖软件:1. uuid-dev2. ZeroMQ 2.1.7 - Note that you should not install version 2.1.10, as that version has some serious bugs that can cause strange issues for a Storm cluster. In some rare

2013-05-13 19:10:57 1869

原创 Linux命令备注

strings:命令查看ld.so.cache是否刷新ldconfig:重新生成ld.so.cache文件ldd:查看程式运行所需的共享库>: 输出重定向1>/dev/null 2>&1将stdout标准输出重定向到空设备文件/dev/null ,同时将stderr标准错误输出的重定向跟stdout标准输出重定向一致,也输出到空设备文件/dev/null。0代表标准

2013-05-13 18:17:14 591

原创 Shell脚本多行注释方法

Shell语法上没有提供多行注释的方法,可以通过如下方式来变相实现,冒号:表示什么也不做:command1command2command3command4command5BLOCK在两个BLOCK中间的是需要注释掉的Shell脚本。

2013-05-13 10:37:13 1145

原创 Eclipse版本代号

Eclipse 1.0——2001年11月7日(Win32/Linux32 Motif)Eclipse 2.0——2002年6月27日(Linux32 Motif + GTK, and Solaris/QNX/AIX)Eclipse 2.1——2003年3月27日(OSX first version)Eclipse 3.0——2004年6月25日(首个OSGi版本)Eclipse

2013-05-11 17:01:26 531

原创 TCP状态转换流程

TCP一次Server和Client建立连接,关闭连接的完整流程图如下所示:实线代表客户端流程,虚线代表服务端流程。client:1. 发起连接请求,三次握手中的第一次,client socket进入SYN_SENT状态3. 收到server对于第一次握手请求包的ack应答(同时包含server的连接建立请求),发送client对于server连接建立请求的ack响应(

2013-04-14 11:22:06 929

原创 Nginx模块的配置与解析

1. 模块的定义struct ngx_module_s { ngx_uint_t ctx_index; ngx_uint_t index; ngx_uint_t spare0; ngx_uint_t spare1; ngx_uint_t spa

2013-04-13 23:11:16 669

翻译 "Double-Checked Locking"失效问题详解

Double-Checked Locking原本是为了解决多线程场景下的懒加载问题。但是当用Java实现时,如果不用额外的同步而造成的结果是不稳定的。总结原因有如下几个点:1) 由于多线程同时进入临界区,造成重复创建单例对象2) 由于编译器和处理器的指令重排,造成将未完全初始化的对象暴露出去实现懒加载的解决方案:1) 将成员变量声明为static,不用double-checked

2013-04-13 12:42:44 1666

原创 AQS的应用-FutureTask | CountDownLatch | ReentrantLock

AbstractQueuedSynchronizer是Java并发包的基础,依托AQS所实现的CHL队列,JDK实现了很多实用的工具1. FutureTask2. CountDownLatch3. ReentrantLock4. ReentrantReadWriteLock5. Semaphore上面这几个类都是对AQS的具体应用,都是利用了AQS中的共享状态变量state

2013-04-09 22:36:58 742

原创 Tomcat NIO

Tomcat从6.0版本开始支持NIO, 主体部分代码集中在NioEndpoint这个类当中,Tomcat NIO采用经典的反应堆模式设计,其中核心的组件包括:1) NioEndpoint (组装器)2) Acceptor (独立子线程)3) Poller (独立子线程)(反应堆模式中的multiplexer的wrapper)4) Worker (独立子线程)(反应堆模式中的dis

2013-04-08 08:57:59 1272

原创 Java并发包--AbstractQueuedSynchronizer

官方文档:AQS提供了一种依赖先进先出队列(FIFO)的用于实现阻塞锁和相关同步器的框架。并且为大多数依赖一个单个原子int变量来表达其状态的同步器提供了一个非常有用的基础支持。AQS的子类必须实现在AQS中定义的保护方法,这些保护方法可以改变同步器的状态,而状态的改变要依赖同步器自身的获取和释放的状态。除此以外,AQS中的其他方法实现了所有的入队和阻塞机制。子类可以定义其他的状态变量,但是get

2013-04-04 17:58:46 895

原创 Jetty Buffer

一个框架之所以优秀,很重要的原因之一是设计者对每一处设计细节都做了充分的思考和优化,就像nginx之于lighttpd,jetty之于tomcat等等。缓存作为影响框架性能的一个重要因素,是每个优秀框架都要认真设计的方面,先看看JDK原生的Buffer结构:简单来说JDK中的Buffer就分为两类,基于堆的Buffer和非基于堆(Native)的Buffer。HeapByteBuf

2013-02-24 14:29:17 788

翻译 JDK关于direct buffer与non-direct buffer的说明

ByteBuffer定义在JDK1.4的java.nio包中,对于其有如下说明:一个字节数组要么是direct要么是non-direct。对于direct buffer,Java虚拟机会尽最大的努力通过它来执行本地IO操作。这意味着虚拟机将在每一次底层操作系统的IO操作调用前后,尝试避免将buffer中的内容拷贝到一个中间buffer。为了创建一个direct byte buffer, 可

2013-02-24 12:11:16 677

原创 nginx 之 多进程模型

Nginx的入口main函数在nginx.c文件中int ngx_cdeclmain(int argc, char *const *argv){ // 资源初始化代码 ... if (ngx_process == NGX_PROCESS_MASTER) { // 启动多进程模型 ngx_master_process_cycle(cycl

2013-01-27 00:03:34 630

原创 Servlet容器 - Tomcat请求处理原理

一. TCP/IP vs.  Socketsocket的历史套接口(Socket), 有时称为“Berkeley 套接口”。因为它源自Berkeley Unix。在80 年代早期,远景研究规划局(Advanced Research Projects Agency, ARPA)资助了佳利福尼亚大学伯克利分校的一个研究组,让他们将TCP/IP软件移植到UNIX操作系统中,并将结果提供给其他

2013-01-26 21:27:49 906

原创 Jetty NIO (二)

这次重点分析两个方法,一个是SelectorSet.doSelect, 一个是EndPoint.schedule, 这两个方法代表最核心的JettyNIO实现过程。后面就是Http协议的具体处理业务逻辑了。Jetty将各种IO模型混合在一个统一的框架中,并没有剥离开来,不知为何要采用如此复杂的设计?一个SelectorSet.doSelect简化的NIO流程如下所示:public cl

2013-01-22 21:59:16 639

原创 Jetty NIO (一)

启动Jetty的命令行为java -jar start.jar --ini=start.iniStart.jar会调用org.mortbay.xml.XmlConfiguration的main()方法,如果没有提供启动参数则使用缺省的jetty.xml。代码首先实例化XmlConfiguration对象,然后调用其configure()方法去加载定义在xml文件里的类org.mortb

2013-01-22 21:54:20 4154

翻译 Java内存管理白皮书

新生代老生代指定参数串行收集器stop-the-worldmark-sweep-compact-XX:+UseSerialGC并行收集器stop-the-world(多线程)mark-sweep-compact-XX:+UseParallelGC并行压缩收集器stop-the-world(多线程)mark(多线程)

2013-01-20 21:26:50 1106 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除