Mercurial Hosting > luan
changeset 951:e542a9cc75ef
simplify SelectorManager
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 12 Oct 2016 18:12:12 -0600 |
parents | a778413aefc0 |
children | 669769bcdf5c |
files | src/org/eclipse/jetty/io/nio/SelectorManager.java |
diffstat | 1 files changed, 6 insertions(+), 121 deletions(-) [+] |
line wrap: on
line diff
--- a/src/org/eclipse/jetty/io/nio/SelectorManager.java Wed Oct 12 14:37:56 2016 -0600 +++ b/src/org/eclipse/jetty/io/nio/SelectorManager.java Wed Oct 12 18:12:12 2016 -0600 @@ -58,11 +58,6 @@ { public static final Logger LOG=LoggerFactory.getLogger("org.eclipse.jetty.io.nio"); - private static final int __MONITOR_PERIOD=Integer.getInteger("org.eclipse.jetty.io.nio.MONITOR_PERIOD",1000).intValue(); - private static final int __MAX_SELECTS=Integer.getInteger("org.eclipse.jetty.io.nio.MAX_SELECTS",100000).intValue(); - private static final int __BUSY_PAUSE=Integer.getInteger("org.eclipse.jetty.io.nio.BUSY_PAUSE",50).intValue(); - private static final int __IDLE_TICK=Integer.getInteger("org.eclipse.jetty.io.nio.IDLE_TICK",400).intValue(); - private int _maxIdleTime; private long _lowResourcesConnections; private SelectSet[] _selectSet; @@ -74,9 +69,9 @@ * @param maxIdleTime The maximum period in milli seconds that a connection may be idle before it is closed. * @see #setLowResourcesMaxIdleTime(long) */ - public void setMaxIdleTime(long maxIdleTime) + public void setMaxIdleTime(int maxIdleTime) { - _maxIdleTime=(int)maxIdleTime; + _maxIdleTime = maxIdleTime; } /* ------------------------------------------------------------ */ @@ -212,7 +207,6 @@ super.doStop(); } - /* ------------------------------------------------------------------------------- */ public abstract AsyncConnection newConnection(SocketChannel channel, AsyncEndPoint endpoint, Object attachment); public String dump() @@ -235,22 +229,14 @@ private volatile SaneSelector _selector; private volatile Thread _selecting; - private int _busySelects; - private long _monitorNext; - private boolean _pausing; - private boolean _paused; - private volatile long _idleTick; private ConcurrentMap<SelectChannelEndPoint,Object> _endPoints = new ConcurrentHashMap<SelectChannelEndPoint, Object>(); SelectSet(int acceptorID) throws Exception { _setID=acceptorID; - _idleTick = System.currentTimeMillis(); - // create a selector; _selector = new SaneSelector(); - _monitorNext=System.currentTimeMillis()+__MONITOR_PERIOD; } private void addChange(SocketChannel channel) @@ -285,66 +271,7 @@ if (selector == null) return; - // Do and instant select to see if any connections can be handled. -// int selected = selector.selectNow(); - int selected = selector.select(); - - _now = System.currentTimeMillis(); -/* - // if no immediate things to do - if (selected==0 && selector.selectedKeys().isEmpty()) - { - - // If we are in pausing mode - if (_pausing) - { - try - { - Thread.sleep(__BUSY_PAUSE); // pause to reduce impact of busy loop - } - catch(InterruptedException e) - { - LOG.trace("",e); - } - _now = System.currentTimeMillis(); - } - - // workout how long to wait in select - long wait = __IDLE_TICK; - - // If we should wait with a select - if (wait>0) - { - long before = _now; - selector.select(wait); -// selector.select(10000L); - _now = System.currentTimeMillis(); - - // If we are monitoring for busy selector - // and this select did not wait more than 1ms - if (__MONITOR_PERIOD>0 && _now-before <=1) - { - // count this as a busy select and if there have been too many this monitor cycle - if (++_busySelects>__MAX_SELECTS) - { - // Start injecting pauses - _pausing=true; - - // if this is the first pause - if (!_paused) - { - // Log and dump some status - _paused=true; - LOG.warn("Selector {} is too busy, pausing!",this); - } - } - } - } - } -*/ - // have we been destroyed while sleeping - if (_selector==null || !selector.isOpen()) - return; + selector.select(); // Look for things to do for (SelectionKey key: selector.selectedKeys()) @@ -439,38 +366,6 @@ selector.selectedKeys().clear(); _now = System.currentTimeMillis(); -/* - // Idle tick - if (_now-_idleTick>__IDLE_TICK) - { - _idleTick = _now; - - final long idle_now=((_lowResourcesConnections>0 && selector.keys().size()>_lowResourcesConnections)) - ?(_now+_maxIdleTime) - :_now; - - execute(new Runnable() - { - public void run() - { - for (SelectChannelEndPoint endp:_endPoints.keySet()) - { - endp.checkIdleTimestamp(idle_now); - } - } - public String toString() {return "Idle-"+super.toString();} - }); - - } -*/ - // Reset busy select monitor counts - if (__MONITOR_PERIOD>0 && _now>_monitorNext) - { - _busySelects=0; - _pausing=false; - _monitorNext=_now+__MONITOR_PERIOD; - - } } catch (ClosedSelectorException e) { @@ -498,14 +393,7 @@ { return _now; } -/* - public void wakeup() - { - SaneSelector selector = _selector; - if (selector!=null) - selector.wakeup(); - } -*/ + private SelectChannelEndPoint createEndPoint(SocketChannel channel, SelectionKey sKey) throws IOException { SelectChannelEndPoint endp = new SelectChannelEndPoint(channel,this,sKey, _maxIdleTime); @@ -548,8 +436,7 @@ // close endpoints and selector synchronized (this) { - SaneSelector selector=_selector; - for (SelectionKey key:selector.keys()) + for (SelectionKey key : _selector.keys()) { if (key==null) continue; @@ -570,9 +457,7 @@ try { - selector=_selector; - if (selector != null) - selector.close(); + _selector.close(); } catch (IOException e) {