2.2.1 EndPoint 组件
上一篇讲到endPoint 启动的时候
创建了一个线程池createExecutor
启动了一个pollerThread
又启动了一个startAcceptorThreads
一个个慢慢看看
线程池到底干啥用的 一眼看不出来 往后放,先看那两个
pollerThread
源码如下
this.pollers = new NioEndpoint.Poller[this.getPollerThreadCount()];
for(int i = 0; i < this.pollers.length; ++i) {
this.pollers[i] = new NioEndpoint.Poller();
Thread pollerThread = new Thread(this.pollers[i], this.getName() + "-ClientPoller-" + i);
pollerThread.setPriority(this.threadPriority);
pollerThread.setDaemon(true);
pollerThread.start();
}
第一句创建了一个poller数组
poller的逻辑太过复杂,先看下面这个
2.startAcceptorThreads
protected void startAcceptorThreads() {
int count = this.getAcceptorThreadCount();
this.acceptors = new ArrayList(count);
for(int i = 0; i < count; ++i) {
Acceptor<U> acceptor = new Acceptor(this);
String threadName = this.getName() + "-Acceptor-" + i;
acceptor.setThreadName(threadName);
this.acceptors.add(acceptor);
Thread t = new Thread(acceptor, threadName);
t.setPriority(this.getAcceptorThreadPriority());
t.setDaemon(this.getDaemon());
t.start();
}
}
这里就新建了一个acceptor的数组,并启动了相关的线程
那么看看acceptor具体是什么
请看下篇【2.2.2 EndPoint Acceptor组件】
不过看下面分析之前,强烈建议先看看NIO部分
因为里面涉及到的
所有的socket selector poller 都和NIO有关
没有NIO的知识 看的会比较头晕,根本不知道发生了什么