Author: markt
Date: Wed Jun 1 21:44:37 2016
New Revision: 1746503
URL: http://svn.apache.org/viewvc?rev=1746503&view=rev
Log:
Add a SocketProcessor cache to align with NIO/NIO2
Modified:
tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=1746503&r1=1746502&r2=1746503&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Wed Jun 1
21:44:37 2016
@@ -51,6 +51,7 @@ import org.apache.tomcat.jni.Socket;
import org.apache.tomcat.jni.Status;
import org.apache.tomcat.util.ExceptionUtils;
import org.apache.tomcat.util.buf.ByteBufferUtils;
+import org.apache.tomcat.util.collections.SynchronizedStack;
import org.apache.tomcat.util.net.AbstractEndpoint.Acceptor.AcceptorState;
import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
import org.apache.tomcat.util.net.SSLHostConfig.Type;
@@ -106,6 +107,11 @@ public class AprEndpoint extends Abstrac
private final Map<Long,AprSocketWrapper> connections = new
ConcurrentHashMap<>();
+ /**
+ * Cache for SocketProcessor objects
+ */
+ private SynchronizedStack<SocketProcessor> processorCache;
+
// ------------------------------------------------------------ Constructor
public AprEndpoint() {
@@ -533,6 +539,9 @@ public class AprEndpoint extends Abstrac
running = true;
paused = false;
+ processorCache = new
SynchronizedStack<>(SynchronizedStack.DEFAULT_SIZE,
+ socketProperties.getProcessorCache());
+
// Create worker collection
if (getExecutor() == null) {
createExecutor();
@@ -622,6 +631,7 @@ public class AprEndpoint extends Abstrac
}
sendfile = null;
}
+ processorCache.clear();
}
shutdownExecutor();
}
@@ -821,12 +831,17 @@ public class AprEndpoint extends Abstrac
// result of calling AsyncContext.dispatch() from a non-container
// thread
synchronized (socketWrapper) {
- SocketProcessor proc = new SocketProcessor(socketWrapper,
event);
+ SocketProcessor sc = processorCache.pop();
+ if (sc == null) {
+ sc = new SocketProcessor(socketWrapper, event);
+ } else {
+ sc.reset(socketWrapper, event);
+ }
Executor executor = getExecutor();
if (dispatch && executor != null) {
- executor.execute(proc);
+ executor.execute(sc);
} else {
- proc.run();
+ sc.run();
}
}
} catch (RejectedExecutionException ree) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]