Package com.google.code.yanf4j.nio.impl
Class Reactor
- java.lang.Object
-
- java.lang.Thread
-
- com.google.code.yanf4j.nio.impl.Reactor
-
- All Implemented Interfaces:
java.lang.Runnable
public final class Reactor extends java.lang.ThreadReactor pattern
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classReactor.PaddingAtomicBooleanstatic classReactor.RegisterEvent
-
Field Summary
Fields Modifier and Type Field Description private Configurationconfigurationprivate NioControllercontrollerstatic intDEFAULT_WAITprivate java.util.concurrent.locks.Lockgateprivate java.util.concurrent.atomic.AtomicIntegerjvmBugstatic intJVMBUG_THRESHHOLDJVM bug thresholdstatic intJVMBUG_THRESHHOLD1static intJVMBUG_THRESHHOLD2private booleanjvmBug0private booleanjvmBug1private longlastCheckTimestampprivate longlastJVMBugprivate static org.slf4j.Loggerlogprivate longnextTimeoutprivate intreactorIndexprivate java.util.Queue<Reactor.RegisterEvent>registerprivate java.nio.channels.Selectorselectorprivate SelectorManagerselectorManagerprivate intselectTriesprivate java.util.concurrent.atomic.AtomicBooleanwakenUp
-
Constructor Summary
Constructors Constructor Description Reactor(SelectorManager selectorManager, Configuration configuration, int index)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) voidbeforeSelect()private booleancheckExpired(java.nio.channels.SelectionKey key, Session session)private longcheckExpiredIdle(java.nio.channels.SelectionKey key, Session session)private voidcheckIdle(Session session)private longcheckSessionTimeout()Check session timeout or idlevoiddispatchEvent(java.util.Set<java.nio.channels.SelectionKey> selectedKeySet)Dispatch selected eventprivate voiddispatchSessionEvent(Session session, EventType event)(package private) ConfigurationgetConfiguration()intgetReactorIndex()java.nio.channels.SelectorgetSelector()private SessiongetSessionFromAttchment(java.nio.channels.SelectionKey key)private booleanisNeedCheckSessionIdleTimeout()private booleanisReactorThread()private booleanlookJVMBug(long before, int selected, long wait)Look jvm bugvoidpostSelect(java.util.Set<java.nio.channels.SelectionKey> selectedKeys, java.util.Set<java.nio.channels.SelectionKey> allKeys)private voidprocessRegister()voidregisterChannel(java.nio.channels.SelectableChannel channel, int ops, java.lang.Object attachment)private voidregisterChannelNow(java.nio.channels.SelectableChannel channel, int ops, java.lang.Object attachment)voidregisterSession(Session session, EventType event)voidrun()(package private) voidselectNow()(package private) voidunregisterChannel(java.nio.channels.SelectableChannel channel)(package private) voidwakeup()-
Methods inherited from class java.lang.Thread
activeCount, checkAccess, clone, countStackFrames, currentThread, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, onSpinWait, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, suspend, toString, yield
-
-
-
-
Field Detail
-
JVMBUG_THRESHHOLD
public static final int JVMBUG_THRESHHOLD
JVM bug threshold
-
JVMBUG_THRESHHOLD2
public static final int JVMBUG_THRESHHOLD2
-
JVMBUG_THRESHHOLD1
public static final int JVMBUG_THRESHHOLD1
-
DEFAULT_WAIT
public static final int DEFAULT_WAIT
- See Also:
- Constant Field Values
-
log
private static final org.slf4j.Logger log
-
jvmBug0
private boolean jvmBug0
-
jvmBug1
private boolean jvmBug1
-
reactorIndex
private final int reactorIndex
-
selectorManager
private final SelectorManager selectorManager
-
jvmBug
private final java.util.concurrent.atomic.AtomicInteger jvmBug
-
lastJVMBug
private long lastJVMBug
-
selector
private java.nio.channels.Selector selector
-
controller
private final NioController controller
-
configuration
private final Configuration configuration
-
wakenUp
private final java.util.concurrent.atomic.AtomicBoolean wakenUp
-
register
private java.util.Queue<Reactor.RegisterEvent> register
-
gate
private final java.util.concurrent.locks.Lock gate
-
selectTries
private int selectTries
-
nextTimeout
private long nextTimeout
-
lastCheckTimestamp
private long lastCheckTimestamp
-
-
Constructor Detail
-
Reactor
Reactor(SelectorManager selectorManager, Configuration configuration, int index) throws java.io.IOException
- Throws:
java.io.IOException
-
-
Method Detail
-
getSelector
public final java.nio.channels.Selector getSelector()
-
getReactorIndex
public int getReactorIndex()
-
run
public void run()
- Specified by:
runin interfacejava.lang.Runnable- Overrides:
runin classjava.lang.Thread
-
lookJVMBug
private boolean lookJVMBug(long before, int selected, long wait) throws java.io.IOExceptionLook jvm bug- Parameters:
before-selected-wait-- Returns:
- Throws:
java.io.IOException
-
dispatchEvent
public final void dispatchEvent(java.util.Set<java.nio.channels.SelectionKey> selectedKeySet)
Dispatch selected event- Parameters:
selectedKeySet-
-
unregisterChannel
final void unregisterChannel(java.nio.channels.SelectableChannel channel) throws java.io.IOException- Throws:
java.io.IOException
-
checkSessionTimeout
private final long checkSessionTimeout()
Check session timeout or idle- Returns:
-
isNeedCheckSessionIdleTimeout
private boolean isNeedCheckSessionIdleTimeout()
-
getSessionFromAttchment
private final Session getSessionFromAttchment(java.nio.channels.SelectionKey key)
-
isReactorThread
private final boolean isReactorThread()
-
beforeSelect
final void beforeSelect()
-
processRegister
private final void processRegister()
-
getConfiguration
Configuration getConfiguration()
-
postSelect
public final void postSelect(java.util.Set<java.nio.channels.SelectionKey> selectedKeys, java.util.Set<java.nio.channels.SelectionKey> allKeys)
-
checkExpiredIdle
private long checkExpiredIdle(java.nio.channels.SelectionKey key, Session session)
-
checkIdle
private final void checkIdle(Session session)
-
checkExpired
private final boolean checkExpired(java.nio.channels.SelectionKey key, Session session)
-
registerChannel
public final void registerChannel(java.nio.channels.SelectableChannel channel, int ops, java.lang.Object attachment)
-
registerChannelNow
private void registerChannelNow(java.nio.channels.SelectableChannel channel, int ops, java.lang.Object attachment)
-
wakeup
final void wakeup()
-
selectNow
final void selectNow() throws java.io.IOException- Throws:
java.io.IOException
-
-