设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 数据 手机
当前位置: 首页 > 服务器 > 系统 > 正文

Tomcat 中的 NIO 源码分析(8)

发布时间:2020-01-07 12:09 所属栏目:52 来源:站长网
导读:我们看到,这里又没有进行实际的处理,而是将这个 SocketChannel 注册到了其中一个 poller 上。因为我们知道,acceptor 应该尽可能的简单,只做 accept 的工作,简单处理下就往后面扔。acceptor 还得回到之前的循环

我们看到,这里又没有进行实际的处理,而是将这个 SocketChannel 注册到了其中一个 poller 上。因为我们知道,acceptor 应该尽可能的简单,只做 accept 的工作,简单处理下就往后面扔。acceptor 还得回到之前的循环去 accept 新的连接呢。

我们只需要明白,此时,往 poller 中注册了一个 NioChannel 实例,此实例包含客户端过来的 SocketChannel 和一个 SocketBufferHandler 实例。

Poller

之前我们看到 acceptor 将一个 NioChannel 实例 register 到了一个 poller 中。在看 register 方法之前,我们需要先对 poller 要有个简单的认识。

public class PollerimplementsRunnable{ 

 

publicPoller throws IOException { 

// 每个 poller 开启一个 Selector 

this.selector = Selector.open; 

private Selector selector; 

// events 队列,此类的核心 

private final SynchronizedQueue<PollerEvent> events = 

new SynchronizedQueue<>; 

 

private volatile boolean close = false; 

private long nextExpiration = 0;//optimize expiration handling 

 

// 这个值后面有用,记住它的初始值为 0 

private AtomicLong wakeupCounter = new AtomicLong(0); 

 

private volatile int keyCount = 0; 

 

... 

敲重点:每个 poller 关联了一个 Selector。

Poller 内部围着一个 events 队列转,来看看其 events 方法:

public boolean events { 

boolean result = false; 

 

PollerEvent pe = ; 

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读