[#1024] Limit the number of SelectionKey.interestedOps(..) calls for performance reasons

This commit is contained in:
Norman Maurer 2013-02-07 15:34:38 +01:00
parent 611bb32846
commit a13246a2b6
2 changed files with 10 additions and 4 deletions

View File

@ -30,7 +30,7 @@ import java.nio.channels.SelectionKey;
import java.nio.channels.WritableByteChannel;
/**
* {@link io.netty.channel.nio.AbstractNioChannel} base class for {@link Channel}s that operate on bytes.
* {@link AbstractNioChannel} base class for {@link Channel}s that operate on bytes.
*/
public abstract class AbstractNioByteChannel extends AbstractNioChannel {
@ -56,7 +56,10 @@ public abstract class AbstractNioByteChannel extends AbstractNioChannel {
public void read() {
assert eventLoop().inEventLoop();
final SelectionKey key = selectionKey();
key.interestOps(key.interestOps() & ~readInterestOp);
if (!config().isAutoRead()) {
// only remove readInterestOp if needed
key.interestOps(key.interestOps() & ~readInterestOp);
}
final ChannelPipeline pipeline = pipeline();
final ByteBuf byteBuf = pipeline.inboundByteBuffer();

View File

@ -24,7 +24,7 @@ import java.nio.channels.SelectableChannel;
import java.nio.channels.SelectionKey;
/**
* {@link io.netty.channel.nio.AbstractNioChannel} base class for {@link Channel}s that operate on messages.
* {@link AbstractNioChannel} base class for {@link Channel}s that operate on messages.
*/
public abstract class AbstractNioMessageChannel extends AbstractNioChannel {
@ -46,7 +46,10 @@ public abstract class AbstractNioMessageChannel extends AbstractNioChannel {
public void read() {
assert eventLoop().inEventLoop();
final SelectionKey key = selectionKey();
key.interestOps(key.interestOps() & ~readInterestOp);
if (!config().isAutoRead()) {
// only remove readInterestOp if needed
key.interestOps(key.interestOps() & ~readInterestOp);
}
final ChannelPipeline pipeline = pipeline();
final MessageBuf<Object> msgBuf = pipeline.inboundMessageBuffer();