SocketThread类是一个很底层的类,在初始化时调用了Selector.open(clientsSel)。网络
socketReadThread nThread个socket
socketWriteThread nThread个spa
ResultsListener nThread个线程
completionService一个,池化线程nThread个,在sockThread.run里被submit,ResultsListener里进行completionService.take().get()取出执行结果。对象
forCompletion有序队列一个,在socketThread.run里开始add,同一方法当即被从最小依次取出,而后submit给completionService。队列
waiting有序队列一个,recreateSelector阶段存在add,最大来源是addSocketService静态方法,在 socketThread.run最后阶段的addAllWaiting时注册Channel时把waiting里的IOService取出作为附加对象 绑定。事件
主方法+两个有序队列,一个是等待处理队列,一个是完成队列。rem
forCompletion完成队列里的内容,交由具体的completionService完成后,由ResultListener相关线程处理最终结果。get
主方法:addSocketService。先判断是等发仍是等收,取模进入对应的处理线程的wait队列。对应线程会由addAllWaiting触发网络绑定,主线程的死循环捕捉事件进行分发给completionService的动做。it
addSocketService的IOService,应该是永远waitingToRead,有时waitingToSend。
主方法:removeSocketService。取消绑定对应的SelectionKey。
对SocketChannel的封装。
用一个LinkedBlockingQueue来保存要发送的数据dataToSend。
作了真正的流量统计。
这个类启动了accept的端口等待接入。
接入后生成一个IOService,其中保存了socketChannel信息。
传递IOService到能够waiting队列后,取出其中的socketChannel绑定事件,便可收发。