`
bofang
  • 浏览: 126705 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论
文章列表
    NIO的通用模型是使用一个Selector管理所有的SocketChannel,包括ServerSocketChannel。但是,诸多开源工程中,使用模式会有些不同,下面描述了几种开源软件在某些组件中如何使用Selector的。   1. 多个Selector管理客户端的读写   Voldemort使用NIO有些不同。ServerSocketChannel是阻塞模式,但是,与客户端通信的SocketChannel却是非阻塞模式。ServerSocketChannel并没有被Selector管理,而是在一个单独的线程中不断监听客户端的请求,建立SocketChannel。   ...
    RoutedStore是Voldemort客户端的一个重要组件,他的职责是将数据操作路由到不同的节点上。RoutedStore内部维护了与节点通信的客户端列表,这些客户端是Store的实现类,可以是SocketStore或HttpStore。对于每一个节点,RoutedStore会建 ...
ThreadLocal是JDK提供的一个工具类,利用ThreadLocal,应用可以将某个值绑定到当前处理的线程上,在线程的后续处理过程中,该值可以很方便地被获取并修改。这样可以在一定程度上避免该值在方法调用中的传递。可以利用ThreadLocal保存线程执行的上下文。webwork的ActionContext就利用了ThreadLocal来保存当前Action执行的一些环境变量,所以,可以很方便地调用ActionContext.get()来得到一个与当前线程关联的ActionContext对象。 源码之前了无秘密。下面是ThreadLocal的get方法: public ...
    StoreClient是一个接口,定义了get, put, delete等操作。Voldemort使用了工厂方法来得到具体的StoreClient,StoreClientFactory是定义了工厂方法的接口。HttpStoreClientFactory, SocketStoreClientFactory, CachingStoreClientFactory, MockStoreClientFactory, StaticStoreClientFactory实现了StoreClientFactory接口。   DefaultStoreClient是StoreClient的实现类。De ...
    1. 忽略异常,往上抛   一般在打开Socket时出现的异常应该往上抛,不应该吃掉异常,致使上层的调用者无法感知这些异常。我们在Hadoop的RPC的Server初始化中可以看到这一点。如果在打开Socket的时候抛出异常,该异常一直往上抛,从而到达最顶端,即Namenode的初始化,从而导致Namenode初始化失败。因为RPC中Server的Socket是一个必不可少的组件,如果该组件初始化失败,会使服务不完整。所以,需要让上层调用者知道这个失败。   一般最底层处理IO的异常应该往上抛。例如在Hadoop的RPC的Server中的channelWrite(Writea ...
  jetty的NIO如何处理IO   Listener实例化一个(或多个)Selector。Listener不断accept新的socket。每接受一个socket,生成对应的SelectableEndPoint(该SelectableEndPoint继承了ChannelEndPoint,内部维护了与客户端通信的SocketChannel。实现了Runnable接口。),调用该endpoint的dispatch方法。如果有空闲线程,会得到一个线程处理这个请求,否则的话,将该endpoint放入到队列。   线程池里的线程数目是有上限的。每一个线程处理一个请求。如果处理请求的线程被阻塞 ...
    Hadoop的RPC如何处理IO   Hadoop在RPC的Server端使用了NIO的方式来处理客户端的请求。   Server端没有线程池,Listener类会打开一个线程,该类拥有一个Selector,该Selector负责接收链接,处理链接的输入流。一旦一个客户端链接被 ...
  -- doMiniBatchPut(BatchOperationInProgress)   实例化一个WALEdit     如果CoprocessorHost不为空,对每一个Put操作调用CoprocessorHost的prePut方法,如果该方法返回true,设置这次Put操作的返回状态为   SUCCESS。(为什么要这样做?Coprocesso ...
  HRegionServer启动流程  
  import java.util.HashMap; import java.util.Map; /** * The simple implementation of B+-Tree, reference http://en.wikipedia.org/wiki/B%2B_tree * * @author bo.fangbo * * @param <T> * @param <V> */ public class BPlusTree <T extends Comparable<T>, V> { ...
-module(my_array). -export([sum/1, print/1, average/1, reverse/1, indexOf/2, sub/3, max/1, bubble_sort/1, quick_sort/1, insert_sort/1]). sum([H|T]) -> H + sum(T); sum([]) -> 0. print([H|T]) -> io:format("~w~n",[H]), print(T); print([]) -> io:format("end~n") ...
JDK7提供了fork-join框架,用该框架写了一个快速排序的实现。     public class QuickSort<T extends Comparable> extends RecursiveAction{ private T[] array; /** * start from 0 */ private int start; /** * end of the array,max value is array.length-1 */ private int end; public Quick ...
  引言   很多应用都需要对传入的数据进行验证,web应用对这种需要更为强烈。提高验证代码的内聚性和高可重用性是一个比较重要的话题。本文提出了一种利用Annotation机制对Java对象的属性进行合法性验证的新方法。   设计目标   如果有大量的属性需要对其合法性进行验证,不可能进行硬编码,同时,业务代码也不应该感知这种验证的存在。但是需要有一个接口供业务代码设置验证的逻辑。并且,某个验证逻辑可以重用到多处变量。还需要达到验证逻辑的集中,接口清晰,便于后续的维护和添加。   设计策略   利用Annotation,可以设置java类的某个实例变量多个验证逻辑,通 ...
    摘要 由于webservice必须要部署到运行飞天的linux环境上,这个给开发带来了诸多不便,即使修改很少的一部分都要重新编译发布整个工程,并且每次上传文件还要打开一个ssh的上传文件的窗口,这些操作耗费了大量的 ...
1.在所有机器上建立相同目录:比如/home/bofang/hadoop,然后把hadoop的包解压到该目录下,最终的目录结构为:/home/bofang/hadoop/hadoop-0.20.2/bin,设/home/bofang/hadoop/hadoop-0.20.2为HADOOP_HOME  2.修改所有机器上的HADOOP_HOME/conf/hadoop-env.sh,指定JAVA_HOME  3.选择一台机器作为master,设ip为:IP_MASTER(192.168.1.10).(虚拟步骤)。  4.配置所有机器的/etc/hosts文件,将集群内的所有的机器的ip ...
Global site tag (gtag.js) - Google Analytics