喜糖

移动开发工程师 。涉及 android、ios、jni

导航

NIO的理解

Posted on 2011-05-13 15:21  喜糖  阅读(226)  评论(0编辑  收藏  举报

1 通道的概念理解

    通道可以形象地比喻为银行出纳窗口使用的气动导管。你的薪水支票就是您要传递的数据,载体就好比是一个缓存区。你先填充缓存区(将你的支票放置在载体上),接着将缓冲"写"到通道中(将载体丢进导管中),然后信息负载就被传递到通道另一侧的I/O服务(银行出纳员)。

    该过程是:出纳员填充缓存区(将支票放置在载体上),接着开始一个反方向的通道传输(将载体丢回到导管中)。载体就到了通道的你这一侧(一个填满了的缓存区正等待你的查验),然后你就会flip缓存区(打开盖子)并将它清空(移除你的收据)。现在你可以开车走了,下一个顾客重复上面的内容。

2 选择器的概念

    每一个启动导管(通道)都只与一个出纳员的窗口相连。这个窗口有三个槽可以放置运输过来的物品(数据缓冲区),每个槽都有一个指示器(选择键,selection key),当运输的物品进入时会亮起。同时出纳员(工作线程)有看书的癖好,每过一段时间,出纳员看一眼指示灯(调用select函数),来决定一个通道是否已经就绪(就绪选择)。在传送带闲置时,出纳员(工作线程)可以做其他的事情,但需要注意到时候又可以进行及时的操作