Selector源码分析

前言:

传统的阻塞式网络编程

缺点:一个请求server要起一个线程,消耗资源,吞吐量有限。

1.Selector类

1.1集合

一个channel注册到Selector后,在Selector里用一个SelectionKey来表示该channel。一个Selector里有三个SelectionKey组成的集合:
keys()方法:返回所有注册到该Selector的SelectionKey
selectedKeys()方法:返回所有注册到该Selector的SelectionKey,并且该SelectionKey对应的channel产生了Selector关注的操作。
the cancelled-key set:取消的key。取消后channel还没有取消注册,下一次select的时候才会取消注册。

1.2Selector.select()方法

三个步骤

  1. 清空the cancelled-key set,对应的channel取消注册。
  2. 访问底层操作查询注册的channel有没有产生关注的事件,如果有添加到the selected-key set
  3. ...

2.SelectionKey类

SelectionKey.interestOps()方法:返回关注的操作
SelectionKey.readyOps()方法:返回已准备好的操作。

3.SelectableChannel类

SelectableChannel.register()方法:注册到

public abstract SelectableChannel configureBlocking(boolean block)

阻塞式,非阻塞式

1.创建Selector

调用静态方法Selector.open()可以创建Selector对象。该方法只有一行代码

SelectorProvider.provider().openSelector()

SelectorProvider是spi包里的类。

|d | dd
|dd

你可能感兴趣的:(netty)