`
wbj0110
  • 浏览: 1622656 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论
文章列表
在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel。 transferFrom() FileChannel的transferFrom()方法可以将数据从源通道传输到FileChannel中(译者注:这个方法在JDK文档中的解释为将字节从给定的可读取字节通道传输到此通道的文件中)。下面是一个简单的例子:
Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Channel在中文经常翻译为通道)中读取或者写入到Channel的操作。分散(scatter)从Channel中读取是指在读操作时将读取的数据写入多个buffer中。因此,Channel将从Channel中读取的数据“分散(scatter)”到多个Buffer中。聚集(gather)写入Channel是指在写操作时将多个buffer的数据写入同一个Channel,因此,Channel 将多个Buffer中的数据“聚集(gather)”后发送到Channel。 scatter ...
Java NIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法 ...
Java NIO的通道类似流,但又有些不同: 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。 通道可以异步地读写。 通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。 正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:   Channel的实现 这些是Java NIO中最重要的通道的实现:
Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的API。其它组件,如Pipe和FileLock,只不过是与三个核心组件共同使用的工具类。因此,在概述中我将集中在这三个组件上。其它组件会在单独的章节中讲到。   Channel 和 Buffer 基本上,所有的 IO 在NIO 中都从一个Channel 开始。Channel 有点象流。 数据可以从Channel读到Buffer中,也可以从Buffer 写 ...
使用Curator也可以简化Ephemeral Node (临时节点)的操作。 临时节点驻存在ZooKeeper中,当连接和session断掉时被删除。 比如通过ZooKeeper发布服务,服务启动时将自己的信息注册为临时节点,当服务断掉时ZooKeeper将此临时节点删除,这样client就不会得到服务的信息了。   PersistentEphemeralNode类代表临时节点。 通过下面的构造函数创建: public PersistentEphemeralNode(CuratorFramework client, Pe ...
  如果Spark的部署方式选择Standalone,一个采用Master/Slaves的典型架构,那么Master是有SPOF(单点故障,Single Point of Failure)。Spark可以选用ZooKeeper来实现HA。      ZooKeeper提供了一个Leader Election机制,利用这个机制可以保证虽然集群存在多个Master但是只有一个是Active的,其他的都是Standby,当Active的Master出现故障时,另外的一个Standby Master会被选举出来。由于集群的信息,包括Worker, Driver和Application的信息都已经持久 ...
安装和配置详解  本文介绍的 Zookeeper 是以 3.2.2 这个稳定版本为基础,最新的版本可以通过官网 http://hadoop.apache.org/zookeeper/来获取,Zookeeper 的安装非常简单,下面将从单机模式和集群模式两个方面介绍 Zookeeper 的安装和配置。  单机模式  单机安装非常简单,只要获取到 Zookeeper 的压缩包并解压到某个目录如:/home/zookeeper-3.2.2 下,Zookeeper 的启动脚本在 bin 目录下,Linux 下的启动脚本是 zkServer.sh,在 3.2.2 这个版本 Zookeeper 没有提供 ...
在一套分布式的online services系统中,各service通常不会放在一台服务器上,而是通过Zookeeper这样的东西,将自己的service信息注册到上面,service的使用者通过Zookeeper来发现各service的信息,从而可以将request发送到不同的service上去 ...
时至今日,zookeeper在分布式的应用场景已经多越来越多了, 比如解决hbase的hmaster单点问题,分布式锁,分布式队列,集群机器监控等等。zookeeper提供的功能包括:配置维护、名字服务、分布式 同步、组服务等。而在引擎后台数 ...
一般规则 关于消息发送,有两条基本规则: 最多一次,即不保证消息传递可靠性 message ordering per sender–receiver pair 消息传递机制 最多一次,意味消息有可能丢失 最少一次,保证消息传递可靠,但可能冗余 保证只成功一次,性能最差,消息成功传递,不冗余 为什么不保证传递
Akka简化了编写并发软件的过程,本文主要讨论Akka如何在并发应用中访问共享内存。 Java内存模型 Java5之前的JMM是相当混乱的。多线程访问共享内存很有可能会得奇怪的结果,如: 可见性问题,无法及时看到其他线程写入的值 指令乱序,观测到其他线程不可能的行为 从Java 5的JSR 133的实现,很多问题就解决了。JMM是基于一组"happens-before"关联规则,限制了访问内存的行为必须在另一个内存访问行为之前发生。当不想按顺序发生时,可以使用:

Akka学习笔记:Actor

    博客分类:
  • Akka
上一节讲到actor是actor system最基本的单元。这一节详细的讲讲actor.更详细here。actor是一个拥有state,behavior,mailbox,children,supervisor strategy的容器.Akka保证所有actor都只运行在自己的轻量级线程,并一次处理一个消息,这样程序员就不用处理同步、竞态 Actor Reference 为了防止actor对象被直接的访问和操作,所以actors通过ActorRef来间接交流。message可以通过如下方式传递: ! (“tell”) - 发送message并马上返回 ? (“ask”) - 发送me ...
  图中表示的是一个Actor System,它显示了在这个Actor System中最重要实体之间的关系。 什么是actor,是一个封装了状态和行为的对象,每个actor都通过message交流,从自己的mailbox中读取别的actor发送的消息。
我们先看下 ActorSystem 里的方法的一个子集。 1. 配置管理 还记得前面我们用来配置日志级别的那个application.conf文件吗?它就好比Java程序里的那些.properties文件一样。马上我们会看到如何通过这个配置文件来自定义分发器以及邮箱等。(这么说好像对 typesafe config 而言不太公平。看过 
Global site tag (gtag.js) - Google Analytics