nio框架中的多个Selector结构

随着并发数量的提高,传统nio框架采用一个Selector来支撑大量连接事件的 管理和触发已经遇到瓶颈,因此现在各种nio框架的新版本都采用多个 Selector 并存的结构,由多个Selector均衡地去管理大量连接。这里以Mina和Grizzly的实现为例。

在Mina 2.0中,Selector的管理是由 org.apache.mina.transport.socket.nio.NioProcessor来处理,每个 NioProcessor对象保存一个Selector,负责具体的select、wakeup、channel的 注册和取消、读写事件的注册和判断、实际的IO读写操作等等,核心代码如下:

public NioProcessor(Executor executor) {
         super(executor);
         try {
             // Open a new selector
             selector = Selector.open();
         } catch (IOException e) {
             throw new RuntimeIoException("Failed to  open a selector.", e);
         }
     }

     protected int select(long timeout) throws Exception  {
         return selector.select(timeout);
     }

     protected boolean isInterestedInRead(NioSession session)  {
         SelectionKey key = session.getSelectionKey ();
         return key.isValid() &&  (key.interestOps() & SelectionKey.OP_READ) != 0;
     }

     protected boolean isInterestedInWrite(NioSession  session) {
         SelectionKey key = session.getSelectionKey ();
         return key.isValid() &&  (key.interestOps() & SelectionKey.OP_WRITE) != 0;
     }
     protected int read(NioSession session, IoBuffer buf)  throws Exception {
         return session.getChannel().read(buf.buf());
     }

     protected int write(NioSession session, IoBuffer buf,  int length) throws Exception {
         if (buf.remaining() <= length) {
             return session.getChannel().write(buf.buf ());
         } else {
             int oldLimit = buf.limit();
             buf.limit(buf.position() + length);
             try {
                 return session.getChannel().write (buf.buf());
             } finally {
                 buf.limit(oldLimit);
             }
         }
     }

时间: 2024-09-15 16:19:55

nio框架中的多个Selector结构的相关文章

Grizzly——不走寻常路的nio框架

在<程序员>最新一期有个专题介绍java开源nio框架,其中谈到了mina和grizzly.mina我还算比较熟悉,写过一些代码,也尝试去读过源码.而grizzly是第一次听说,这个项目是sun的一个开源nio框架,是2004年在GlassFish项目中诞生的,一开始是一个http web server,用于取代Tomcat的Coyote Connector和Sun WebServer,2007年7月1.5版本发布并宣布成为开源项目,项目主页在https://grizzly.dev.java.

如何在Python的Flask框架中使用模版的入门教程

  如何在Python的Flask框架中使用模版的入门教程?          概述 如果你已经阅读过上一个章节,那么你应该已经完成了充分的准备工作并且创建了一个很简单的具有如下文件结构的Web应用: microblog |-flask文件夹 |-<一些虚拟环境的文件> |-app文件夹 | |-static文件夹 | |-templates文件夹 | |-__init__.py文件 | |-views.py文件 |-tmp文件夹 |-run.py文件 以上给你介绍了在Python的Flask

Python的Flask框架中实现分页功能的教程

  这篇文章主要介绍了Python的Flask框架中实现分页功能的教程,文中的示例基于一个博客来实现,需要的朋友可以参考下 Blog Posts的提交 让我们从简单的开始.首页上必须有一张用户提交新的post的表单. 首先我们定义一个单域表单对象(fileapp/forms.py): ? 1 2 class PostForm(Form): post = TextField('post', validators = [Required()]) 下面,我们把这个表单添加到template中(file

探索JSF框架中使用的设计模式

js|设计 设计模式可以帮助用户在更高层次上抽象细节,更好地理解体系结构.如果比较熟悉 GoF 设计模式和 JavaServer Faces (JSF) 框架,本文可以帮助您洞察 JSF 框架中使用的设计模式,深入理解其工作原理. 本文探讨了 JSF 框架中使用的设计模式.详细讨论的设计模式包括 Singleton.Model-View-Controller.Factory Method.State.Composite.Decorator.Strategy.Template Method 和 O

Python的Django框架中settings文件的部署建议

这篇文章主要介绍了Python的Django框架中settings文件的部署建议,包括对local_settings的弊病的一些简单分析,需要的朋友可以参考下 django在一个项目的目录结构划分方面缺乏必要的规范,因此不同人的项目组织形式也千奇百怪,而且也很难说谁的做法就比较好.我根据自己的项目组织习惯,发布了一个项目dj-scaffold. 前些天在reddit上为我的项目dj-scaffold打了个"广告"(见:http://redd.it/kw5d4).不想评价甚糟,甚至差点被

NET框架中的 Observer 模式

应用场景:net 框架下的HttpModule (.net2.0 代码)          先看一下 Observer 模式结构图:       再看一下.net框架中的应用结构图     关于HttpApplication.InitModules()函数的调用代码如下   1private void InitModules()2{3    //根据CONFIG文件中的配置来进行相关Module的创建并返回集合4    this._moduleCollection = RuntimeConfig

iOS文本布局探讨之二——关于TextKit框架中的字体描述

一.引言         UIFont是iOS开发中处理文本字体的类,关于UIFont的相关内容,以前的一篇博客有详细介绍,本片博客主要介绍关于动态字体的应用与字体描述类NSFontDescriptor的应用. UIFont应用介绍:http://my.oschina.net/u/2340880/blog/397115. 二.iOS系统中的动态字体         所谓动态字体,是指在应用使用中,用户可以动态调整字体的风格字号等.在iOS7及之后的iOS系统版本,TextKit框架中提供了一个新

OEA ORM 框架中的冗余属性设计

OEA 框架提供了多种方式来优化分布式数据查询的性能,本篇将会说明如何以声明 OEA 冗余属性的方式,来实现轻量级的数据冗余,以减少关联查询次数及网络数据传输量,提高分布式应用程序性能.   冗余属性功能说明 OEA 冗余属性在框架层面提供了一种易用的机制,把指定冗余路径的关系对象中的属性值复制到本对象中,以解决关联查询.关联数据量等性能问题.应用开发人员只需要简单的定义一个冗余属性,而框架会自动完成对冗余属性的赋值.更新操作.   ORM 中的 N+1 问题示例 在进销存示例中,采购订单的列表

iOS中CoreData数据管理系列二——CoreData框架中三个重要的类

iOS中CoreData数据管理系列二--CoreData框架中三个重要的类 一.引言     在上一篇博客中,介绍了iOS中使用CoreData框架设计数据模型的相关步骤.CoreData框架中通过相关的类将数据--数据模型--开发者无缝的衔接起来.NSManagedObjectModel对应数据模型,即上篇博客中我们创建的.xcdatamodeld文件:NSPersistentStoreCoordinator相当于数据库与数据模型之间的桥接器,通过NSPersistentStoreCoord