设计初衷是提供方便易用,且高效率的nio框架,一部分实现上参考了mina。还包括线程池,编解码,内存池等机制,以便于开发高性能tcp程序。 文档后续会慢慢的补上。 整体实现上尽量少的使用锁,避免cpu浪费。 整体框架提供了服务线程池,对于一个连接来讲,这个连接的事件将会在线程池中执行,不过这个过程保证是顺序执行的,例如对于一个连接,在差不多同时的时间 接收到了两个包,那么,我们可以认为,在第一次接受事件未执行完,第二个事件不会被执行,即这两个事件不是分别被发送到两条线程中执行,可以认为是被串行 化到同一条线程中(注意:此处一条线程,并不是真的在同一条线程中执行,这两个事件可能在不同线程中,只不过框架严格保证执行的先后顺序了,所以对于 ThreadLocal变量的使用,是不安全的)。由于线程池的添加,我们在开过程中,无需再考虑业务层消耗,直接按事件触发式就可以了,也不用再将数据 包投递到另外的线程中。使用方式参见TestProtocolClient,TestProtocolServer
框架还提供了完全不使用线程池的方式,请参见TestClient,TestServer
当然,如果你需要部分事件置入到线程池,也是可以的,后续,我会补一下这反面的例子代码
循环内存池的机制,实际上是为了提供一种避免gc的一种方式,当然如果你的程序不需要内存池也可以取消掉,内存池采用的是块分配,例如块大小1024,如果需要4096的话,内存池会返回4个块,具体使用可以参考TextLineProtocol类.
TextLineProtocol提供了按行的协议解析,字符采用的unicode编码,在类似这种情况下,内存池的作用就体现出来了,不用每次new新的byte数组了。
下载地址 https://code.google.com/p/nio-java-raptor/ 2013/11/13 1.0.9 发布 update: 1.修正内存池释放bug 2.内存池调整为多个processor使用一个 3.解码移动到worker线程中进行处理,tps上升 4.增强性能,在阻塞同步通信下,性能增强30%tps , tps超出相同线程响应模型下mina及netty 30% 11
JAVA日志相关整理学习 Java关于日志我们常见的有commons-loging、log4j、slf4j、LogBack。 Commons-logging:apache最早提供的日志的门面接口。避免和具体的日志方案直接耦合。类似于JDBC的api接口,具体的的JDBC driver实现由各数据库提供商实现。通过统一接口解耦,不过其内部也实现了一些简单日志方案。 Log4j:经典的一种
软件介绍 设计初衷是提供方便易用,且高效率的nio框架,一部分实现上参考了mina。还包括线程池,编解码,内存池等机制,以便于开发高性能tcp程序。 文档后续会慢慢的补上。 整体实现上尽量少的使用锁,避免cpu浪费。 整体框架提供了服务线程池,对于一个连接来讲,这个连接的事件将会在线程池中执行,不过这个过程保证是顺序执行的,例如对于一个连接,在差不多同时的时间 接收到了两个包,那么,我们可以认为,
最后更新时间:2015-03-12 这个Java Path接口是中Java 6或者Java 7中Java NIO 2更新的一部分。这个Java Path接口中Java 7中被添加到了Java NIO中。这个Path接口被放置到了java.nio.file包中,以至于这个Java Path的完整定义名称是:java.nio.file.Path。 一个Java Path实例显示了一个文件系统的路径。一
想看 java io很久了 菜的很 两个文章和一本书 小了解一下先 书没看完 《JAVA NIO》 文章 分别是http://terrylee.me/blog/post/2010/10/02/java-nio-internal-part4.aspx http://tenyears.iteye.com/blog/40489 有点发懵 。。。要加油啊 补上两个讲reactor的
java.nio全称java non-blocking IO,是指jdk1.4 及以上版本里提供的新api(New IO) ,为所有的原始类型(boolean类型除外)提供缓存支持的数据容器,使用它可以提供非阻塞式的高伸缩性网络。 中文名:java非阻塞式IO 特 性:Channel,Buffer,Se
最后更新时间:2014-06-25 Java NIO(新IO)对于Java是一个交替、可供选择的IO API(从Java 1.4版本开始),意味着可替代标准Java IO和Java网络的API。Java NIO跟标准IO的API相比较是提供了一种使用IO工作的不同方式。 Java NIO:通道和缓冲区 在标准IO的API中,你使用字节流和字符流的方式工作。而在NIO中你使用通道和缓冲区工作。
A file's status is 3-valued: The file is verified to exist; The file is verified to not exist; The file's status is unknown, when program has not sufficient right to the file. So !Files.exists(path) !
一、前言 前面已经学习了缓冲和通道,接着学习选择器。 二、选择器 2.1 选择器基础 选择器管理一个被注册的通道集合的信息和它们的就绪状态,通道和选择器一起被注册,并且选择器可更新通道的就绪状态,也可将被唤醒的线程挂起,直到有通道就绪。 SelectableChannel 可被注册到 Selector 对象上,同时可以指定对那个选择器而言,哪种操作是感兴趣的。一个通道可以被注册到多个选择器上,但对
NIO 编程 NIO : Non - Blocking I/O:非阻塞I/O 一个线程,可以管理多个线程。 避免同步I/O通讯差的特点。 主要类: Buffer:缓冲区; Channel:全双工数据通道; Selector:多路选择器。 实现过程: 通过多路选择器轮询,获得有事件操作的集合; 通过SocketChannel读取数据; 在Buffer中实现对数据的操作。 例子: 在服务端,创建Sel
import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSock
Java NIO的SocketChannel是连接tcp网络套接字的channel。有如下两种方式去创建: 1、打开一个SocketChannel,连接到网络上的一个server 2、当ServerSocketChannel收到一个连接,SocketChannel就创建了 打开SocketChannel SocketChannel socketChannel = SocketChannel.ope
Java NIO的ServerSocketChannel是用来监听外来TCP连接的channel,就想标准Java网络中的ServerSocket。实例如下: ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); serverSocketChannel.socket().bind(new InetSocket
高效率点图层(graphicLayer),主要是针对前端大数据量的点渲染。 创建 graphicLayer,在地图上随机绘制10万圆形: //高效率点图层要素对象 var graphics = new ol.Graphic(new ol.geom.Point([-74.0095,40.6184])); map.once('postrender', function () { var graphic
#非技术面试记录# 运营岗 12-投递 13-笔试 20-一面 23-hr面 简单分享下一面面经😊 自我介绍 选择公司看重哪些 为什么选择多益 运营有哪些能力要求 玩过什么游戏这半年 他做了什么好的运营策略和差的运营策略 如何起号 你会选择一个什么平台做宣传 对工作城市偏好 平时在学校都干什么 玩过多益的游戏吗 #本周投递记录# 面了1h,口干舌燥😂
问题内容: 我必须更新我的Doctrine实体以匹配(可能很大)XML文件中的记录。我还必须根据XML中的数据更新ManyToMany关联。这是我在循环内执行的操作: 从XML获取数据 从数据库获取实体(如果不存在,则创建新实体) 设置新实体属性 获取当前的实体关联(getter返回对象) 清除所有关联(通过调用) 设置新的关联(通过在子循环中调用) 由EntityManager保留实体 *循环
本文向大家介绍提高php编程效率技巧,包括了提高php编程效率技巧的使用技巧和注意事项,需要的朋友参考一下 用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则 不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加 上了双引号)。 1、如果能将类的方
本文向大家介绍有效提高JavaScript执行效率的几点知识,包括了有效提高JavaScript执行效率的几点知识的使用技巧和注意事项,需要的朋友参考一下 为了提供新鲜、别致的用户体验,很多网站都会使用 JavaScript 来改善设计、验证表单、检查浏览器,以及Ajax请求,cookie操作等等,实现无刷新动态效果 。但是,要将大量内容在浏览器呈现,如果处理不好,网站性能将会急剧下降。所以我们有
本文向大家介绍如何提高组件的渲染效率呢?相关面试题,主要包含被问及如何提高组件的渲染效率呢?时的应答技巧和注意事项,需要的朋友参考一下 function Child({seconds}){ console.log('I am rendering'); return ( I am update every {seconds} seconds ) }; export default React.mem
本文向大家介绍盘点提高 Python 代码效率的方法,包括了盘点提高 Python 代码效率的方法的使用技巧和注意事项,需要的朋友参考一下 第一招:蛇打七寸:定位瓶颈 首先,第一步是定位瓶颈。举个简单的栗子,一个函数可以从1秒优化到到0.9秒,另一个函数可以从1分钟优化到30秒,如果要花的代价相同,而且时间限制只能搞定一个,搞哪个?根据短板原理,当然选第二个啦。 一个有经验的程序员在这里一定会迟疑
本文向大家介绍PHP提高编程效率的20个要点,包括了PHP提高编程效率的20个要点的使用技巧和注意事项,需要的朋友参考一下 用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则 不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加 上了双引号)。 1、如果能