NIO:写事件要尽量早的被注销.
1,IOServer用一个主线程来处理Accept事件,然后把得到的key封装到IOSession中,再分配到一个读写处理器管理器(IoReadWriteMachineManager是一个数组,如果当前服务器有N个cpu则里面就有n个IoReadWriteMachine对象,相当于每个cpu绑定一个IoReadWriteMachine进行读写的io操作)中处理.
2,Selector中wakeup的作用,每次接受到一个Accept时间,就把对应的IOSession加入到一个IoReadWriteMachine中去,同时会调用这个IoReadWriteMachine中的Selector的wakeup()方法.看了这个方法的解释,发现它会让阻塞的select或者select(long)方法理解返回,同时在这两个方法返回的过程中不论你调用多少次wakeup方法,效果都一样,这个说明很有用.所以代码里面只要注册一个时间到IoReadWriteMachine都会调用一次wakeup,因为平凡调用不会损失效率.
3,SelectionKey是一个把Channel,Channel感兴趣的事件类型绑定的一个对象,当我们通过select方法返回的一组就绪事件队列实际上是一个SelectionKey队列,按照正常的情况我们是取得这个key后就把这个key从这个队列里面删除(不删除反正是有问题,具体为什么会有问题,目前还不太清楚).但是这里有个地方要注意,就是虽然被删除了,但是在NIO内部,这个key对象并没有被删除,你可以通过设置这个这个key的interestOps(int)函数来改变当前这个key对应的Channel感兴趣的事件
,而不一定非要用channel的register方法.
4,IOServer的读事件,写事件,发起连接的事件,都是以IoSession为载体,通过把IoSession放入注册队列,控制队列,等待连接队列,然后再从这写队列取出IoSession来改变他们的key的interestOps来达到读写的目的.可以这样来描述一个IoSession的生命周期:accept后->加入注册队列->通过registerIoSessionsNow从注册队列取出把它绑定到一个IoReadWriteMachine的selector上,并绑定为可读态->读完后如果需要写数据则把IoSession丢入控制队列->通过changeControls方法把设置IoSession对应的SelectionKey的interestOps为可写态
5,在处理写操作时,每次调用IoSession的write方法时,把要写的数据封装到一个WriteFuture(实现了IoFuture接口)的对象内,然后把这个WriteFuture对象放入Sessoin的writeQueue队列,并把当前的IoSession加入到控制队列,就如4里面提到的,然后在IoReadWriteMachine中出理这个写事件,处理写事件的时候,是从把IoSession里取出writeQueue队列,每次取一个WriteFuture对象处理,处理完便推出,再等到下一次写时间过来,直到writeQueue里面的数据被输出完毕.输出完毕后则关闭这个通道的写事件.
分享到:
相关推荐
java编写的简单的io操作源代码!包含文件的复制,删除,新建,移动等一般的操作!很详细
上位机软件Intouch的设备配置驱动IO Server软件安装包 。希望对大家有帮助
intouch IO server 包括S7 ,欧姆龙,ge等plc的IO 驱动
java io流源代码 ,相关文章的源代码,文章地址: http://write.blog.csdn.net/postedit/8706349
JavaEE源代码 commons-ioJavaEE源代码 ...ioJavaEE源代码 commons-ioJavaEE源代码 commons-ioJavaEE源代码 commons-ioJavaEE源代码 commons-ioJavaEE源代码 commons-ioJavaEE源代码 commons-ioJavaEE源代码 commons-io
C标准库源代码\IO.H C标准库源代码\IOINIT.C C标准库源代码\IOMANIP C 标准库源代码\IOMANIP.CPP C标准库源代码\IOMANIP.H C标准库源代码\IOS C标准库源代码\IOS.CPP C标准库源代码\IOS.H C标准库源代码\IOSFWD C...
IOServer安装包,intouch同设备连接的应用软件 演示版
开源的ioserver.在这里提供个下载
有关io流的输入输出联系代码io流的输入输出文件的读写
IO卡的源代码是用C++写的,该源码主要是用C++写的操作IO卡的程序
agar-io源代码
Ioserver java Nio socket 框架 是个不错的NIO 通讯框架,本来想学习mina框架,看了看mina的源码太头痛,本人觉得看懂了Ioserver 再看mina的框架,想多的学习 java NIO 的也可以下载 看看,很值得学习啊!!!
commons io 源代码 开发必须具备的source代码。
IO口程序,是C 语言的源代码程序,可以进行直接的使用
几种网络编程模型 c++ winsock编程模型
模拟spi通信程序(stm32),stm32 SPI IO模拟源代码
在Vmware建立的WindowsNT4.0SP6环境下, 应用Simatic Net V6.0 建立TCP/IP工业以太网,Wonderware Intouch 7.11 的IO Server,完成和Siements PLC 上位机和下位机之间的通讯。 通过截图一步一步演示。
drawio, 软件工程绘图专用,无内置收费功能, 源代码
力控实时历史库及IOserver 二次开发sdk。含有java c# c++等库和demo
网上下的 网上 , 源代码 51io口模拟uart的源代码