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綁定事件,便可收發。