Class EventPumper

  • All Implemented Interfaces:
    Runnable

    class EventPumper
    extends Object
    implements Runnable
    The main NTCP NIO thread.
    • Method Detail

      • startPumping

        public void startPumping()
      • stopPumping

        public void stopPumping()
      • isAlive

        public boolean isAlive()
        Selector can take quite a while to close after calling stopPumping()
      • register

        public void register​(ServerSocketChannel chan)
        Register the acceptor. This is only called from NTCPTransport.bindAddress(), so it isn't clear why this needs a queue.
      • registerConnect

        public void registerConnect​(NTCPConnection con)
        Outbound
      • run

        public void run()
        The selector loop. On high-bandwidth routers, this is the thread with the highest CPU usage, so take care to minimize overhead and unnecessary debugging stuff.
        Specified by:
        run in interface Runnable
      • wantsWrite

        public void wantsWrite​(NTCPConnection con)
        Called by the connection when it has data ready to write (after bw allocation). Only wakeup if new.
      • wantsRead

        public void wantsRead​(NTCPConnection con)
        This is only called from NTCPConnection.complete() if there is more data, which is rare (never?) so we don't need to check for dups or make _wantsRead a Set.
      • releaseBuf

        public static void releaseBuf​(ByteBuffer buf)
        Return a read buffer to the pool. These buffers must be from acquireBuf(), i.e. capacity() == BUF_SIZE. High-frequency path in thread.
      • processWrite

        public boolean processWrite​(NTCPConnection con,
                                    SelectionKey key)
        Asynchronous write all buffers to the channel. This method will disable the interest if no more writes remain. If this returns false, caller MUST call wantsWrite(con)
        Parameters:
        key - non-null
        Returns:
        true if all buffers were completely written, false if buffers remain
        Since:
        0.9.53
      • getIdleTimeout

        public long getIdleTimeout()