高效率的nio框架 nio java raptor
本文导语: 设计初衷是提供方便易用,且高效率的nio框架,一部分实现上参考了mina。还包括线程池,编解码,内存池等机制,以便于开发高性能tcp程序。 文档后续会慢慢的补上。 整体实现上尽量少的使用锁,避免cpu浪费。 整体框架提...
设计初衷是提供方便易用,且高效率的nio框架,一部分实现上参考了mina。还包括线程池,编解码,内存池等机制,以便于开发高性能tcp程序。 文档后续会慢慢的补上。 整体实现上尽量少的使用锁,避免cpu浪费。 整体框架提供了服务线程池,对于一个连接来讲,这个连接的事件将会在线程池中执行,不过这个过程保证是顺序执行的,例如对于一个连接,在差不多同时的时间 接收到了两个包,那么,我们可以认为,在第一次接受事件未执行完,第二个事件不会被执行,即这两个事件不是分别被发送到两条线程中执行,可以认为是被串行 化到同一条线程中(注意:此处一条线程,并不是真的在同一条线程中执行,这两个事件可能在不同线程中,只不过框架严格保证执行的先后顺序了,所以对于 ThreadLocal变量的使用,是不安全的)。由于线程池的添加,我们在开过程中,无需再考虑业务层消耗,直接按事件触发式就可以了,也不用再将数据 包投递到另外的线程中。使用方式参见TestProtocolClient,TestProtocolServer
框架还提供了完全不使用线程池的方式,请参见TestClient,TestServer
当然,如果你需要部分事件置入到线程池,也是可以的,后续,我会补一下这反面的例子代码
循环内存池的机制,实际上是为了提供一种避免gc的一种方式,当然如果你的程序不需要内存池也可以取消掉,内存池采用的是块分配,例如块大小1024,如果需要4096的话,内存池会返回4个块,具体使用可以参考TextLineProtocol类.
TextLineProtocol提供了按行的协议解析,字符采用的unicode编码,在类似这种情况下,内存池的作用就体现出来了,不用每次new新的byte数组了。
您可能感兴趣的文章:
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。