Changeset 54b367b


Ignore:
Timestamp:
Aug 23, 2012 7:08:45 PM (7 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
e3e15850
Parents:
b6112727
Message:
  • NTCP: Reduce lock contention
Location:
router/java/src/net/i2p/router/transport/ntcp
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • router/java/src/net/i2p/router/transport/ntcp/Reader.java

    rb6112727 r54b367b  
    44import java.util.ArrayList;
    55import java.util.HashSet;
     6import java.util.Iterator;
     7import java.util.LinkedHashSet;
    68import java.util.List;
    79import java.util.Set;
     
    2123    private final Log _log;
    2224    // TODO change to LBQ ??
    23     private final List<NTCPConnection> _pendingConnections;
     25    private final Set<NTCPConnection> _pendingConnections;
    2426    private final Set<NTCPConnection> _liveReads;
    2527    private final Set<NTCPConnection> _readAfterLive;
     
    2931        _context = ctx;
    3032        _log = ctx.logManager().getLog(getClass());
    31         _pendingConnections = new ArrayList(16);
     33        _pendingConnections = new LinkedHashSet(16);
    3234        _runners = new ArrayList(8);
    3335        _liveReads = new HashSet(8);
     
    6163                _readAfterLive.add(con);
    6264                already = true;
    63             } else if (!_pendingConnections.contains(con)) {
     65            } else {
    6466                _pendingConnections.add(con);
    6567            }
     
    100102                                _pendingConnections.wait();
    101103                            } else {
    102                                 con = _pendingConnections.remove(0);
     104                                Iterator<NTCPConnection> iter = _pendingConnections.iterator();
     105                                con = iter.next();
     106                                iter.remove();
    103107                                _liveReads.add(con);
    104108                            }
  • router/java/src/net/i2p/router/transport/ntcp/Writer.java

    rb6112727 r54b367b  
    22
    33import java.util.ArrayList;
     4import java.util.HashSet;
     5import java.util.Iterator;
     6import java.util.LinkedHashSet;
    47import java.util.List;
     8import java.util.Set;
    59
    610import net.i2p.router.RouterContext;
     
    1620class Writer {
    1721    private final Log _log;
    18     private final List<NTCPConnection> _pendingConnections;
    19     private final List<NTCPConnection> _liveWrites;
    20     private final List<NTCPConnection> _writeAfterLive;
     22    private final Set<NTCPConnection> _pendingConnections;
     23    private final Set<NTCPConnection> _liveWrites;
     24    private final Set<NTCPConnection> _writeAfterLive;
    2125    private final List<Runner> _runners;
    2226   
    2327    public Writer(RouterContext ctx) {
    2428        _log = ctx.logManager().getLog(getClass());
    25         _pendingConnections = new ArrayList(16);
     29        _pendingConnections = new LinkedHashSet(16);
    2630        _runners = new ArrayList(5);
    27         _liveWrites = new ArrayList(5);
    28         _writeAfterLive = new ArrayList(5);
     31        _liveWrites = new HashSet(5);
     32        _writeAfterLive = new HashSet(5);
    2933    }
    3034   
     
    5963                }
    6064                already = true;
    61             } else if (!_pendingConnections.contains(con)) {
    62                 _pendingConnections.add(con);
    63                 pending = true;
     65            } else {
     66                pending = _pendingConnections.add(con);
    6467            }
    6568            _pendingConnections.notifyAll();
     
    6871            _log.debug("wantsWrite: " + con + " already live? " + already + " added to pending? " + pending + ": " + source);
    6972    }
     73
    7074    public void connectionClosed(NTCPConnection con) {
    7175        synchronized (_pendingConnections) {
     
    99103                                _pendingConnections.wait();
    100104                            } else {
    101                                 con = _pendingConnections.remove(0);
     105                                Iterator<NTCPConnection> iter = _pendingConnections.iterator();
     106                                con = iter.next();
     107                                iter.remove();
    102108                                _liveWrites.add(con);
    103109                                if (_log.shouldLog(Log.DEBUG))
Note: See TracChangeset for help on using the changeset viewer.