Decreased the number of wakeup() calls even when then constraint level is greater than 0
This commit is contained in:
parent
90e35cfc14
commit
fd4de999bb
@ -114,7 +114,10 @@ class NioWorker implements Runnable {
|
|||||||
executor.execute(new ThreadRenamingRunnable(this, threadName));
|
executor.execute(new ThreadRenamingRunnable(this, threadName));
|
||||||
} else {
|
} else {
|
||||||
synchronized (selectorGuard) {
|
synchronized (selectorGuard) {
|
||||||
|
if (wakenUp.compareAndSet(false, true)) {
|
||||||
selector.wakeup();
|
selector.wakeup();
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
channel.socket.register(selector, SelectionKey.OP_READ, channel);
|
channel.socket.register(selector, SelectionKey.OP_READ, channel);
|
||||||
if (future != null) {
|
if (future != null) {
|
||||||
@ -366,7 +369,7 @@ class NioWorker implements Runnable {
|
|||||||
boolean changed = false;
|
boolean changed = false;
|
||||||
if (opWrite) {
|
if (opWrite) {
|
||||||
if (!mightNeedWakeup) {
|
if (!mightNeedWakeup) {
|
||||||
interestOps = key.interestOps();
|
interestOps = channel.getInterestOps();
|
||||||
if ((interestOps & SelectionKey.OP_WRITE) == 0) {
|
if ((interestOps & SelectionKey.OP_WRITE) == 0) {
|
||||||
interestOps |= SelectionKey.OP_WRITE;
|
interestOps |= SelectionKey.OP_WRITE;
|
||||||
key.interestOps(interestOps);
|
key.interestOps(interestOps);
|
||||||
@ -375,7 +378,7 @@ class NioWorker implements Runnable {
|
|||||||
} else {
|
} else {
|
||||||
switch (CONSTRAINT_LEVEL) {
|
switch (CONSTRAINT_LEVEL) {
|
||||||
case 0:
|
case 0:
|
||||||
interestOps = key.interestOps();
|
interestOps = channel.getInterestOps();
|
||||||
if ((interestOps & SelectionKey.OP_WRITE) == 0) {
|
if ((interestOps & SelectionKey.OP_WRITE) == 0) {
|
||||||
interestOps |= SelectionKey.OP_WRITE;
|
interestOps |= SelectionKey.OP_WRITE;
|
||||||
key.interestOps(interestOps);
|
key.interestOps(interestOps);
|
||||||
@ -387,35 +390,18 @@ class NioWorker implements Runnable {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
interestOps = key.interestOps();
|
|
||||||
if ((interestOps & SelectionKey.OP_WRITE) == 0) {
|
|
||||||
if (Thread.currentThread() == worker.thread) {
|
|
||||||
interestOps |= SelectionKey.OP_WRITE;
|
|
||||||
key.interestOps(interestOps);
|
|
||||||
changed = true;
|
|
||||||
} else {
|
|
||||||
synchronized (worker.selectorGuard) {
|
|
||||||
selector.wakeup();
|
|
||||||
interestOps |= SelectionKey.OP_WRITE;
|
|
||||||
key.interestOps(interestOps);
|
|
||||||
changed = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 2:
|
case 2:
|
||||||
if (Thread.currentThread() == worker.thread) {
|
interestOps = channel.getInterestOps();
|
||||||
interestOps = key.interestOps();
|
|
||||||
if ((interestOps & SelectionKey.OP_WRITE) == 0) {
|
if ((interestOps & SelectionKey.OP_WRITE) == 0) {
|
||||||
|
if (Thread.currentThread() == worker.thread) {
|
||||||
interestOps |= SelectionKey.OP_WRITE;
|
interestOps |= SelectionKey.OP_WRITE;
|
||||||
key.interestOps(interestOps);
|
key.interestOps(interestOps);
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
synchronized (worker.selectorGuard) {
|
synchronized (worker.selectorGuard) {
|
||||||
|
if (worker.wakenUp.compareAndSet(false, true)) {
|
||||||
selector.wakeup();
|
selector.wakeup();
|
||||||
interestOps = key.interestOps();
|
}
|
||||||
if ((interestOps & SelectionKey.OP_WRITE) == 0) {
|
|
||||||
interestOps |= SelectionKey.OP_WRITE;
|
interestOps |= SelectionKey.OP_WRITE;
|
||||||
key.interestOps(interestOps);
|
key.interestOps(interestOps);
|
||||||
changed = true;
|
changed = true;
|
||||||
@ -429,7 +415,7 @@ class NioWorker implements Runnable {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!mightNeedWakeup) {
|
if (!mightNeedWakeup) {
|
||||||
interestOps = key.interestOps();
|
interestOps = channel.getInterestOps();
|
||||||
if ((interestOps & SelectionKey.OP_WRITE) != 0) {
|
if ((interestOps & SelectionKey.OP_WRITE) != 0) {
|
||||||
interestOps &= ~SelectionKey.OP_WRITE;
|
interestOps &= ~SelectionKey.OP_WRITE;
|
||||||
key.interestOps(interestOps);
|
key.interestOps(interestOps);
|
||||||
@ -438,7 +424,7 @@ class NioWorker implements Runnable {
|
|||||||
} else {
|
} else {
|
||||||
switch (CONSTRAINT_LEVEL) {
|
switch (CONSTRAINT_LEVEL) {
|
||||||
case 0:
|
case 0:
|
||||||
interestOps = key.interestOps();
|
interestOps = channel.getInterestOps();
|
||||||
if ((interestOps & SelectionKey.OP_WRITE) != 0) {
|
if ((interestOps & SelectionKey.OP_WRITE) != 0) {
|
||||||
interestOps &= ~SelectionKey.OP_WRITE;
|
interestOps &= ~SelectionKey.OP_WRITE;
|
||||||
key.interestOps(interestOps);
|
key.interestOps(interestOps);
|
||||||
@ -450,35 +436,18 @@ class NioWorker implements Runnable {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
interestOps = key.interestOps();
|
|
||||||
if ((interestOps & SelectionKey.OP_WRITE) != 0) {
|
|
||||||
if (Thread.currentThread() == worker.thread) {
|
|
||||||
interestOps &= ~SelectionKey.OP_WRITE;
|
|
||||||
key.interestOps(interestOps);
|
|
||||||
changed = true;
|
|
||||||
} else {
|
|
||||||
synchronized (worker.selectorGuard) {
|
|
||||||
selector.wakeup();
|
|
||||||
interestOps &= ~SelectionKey.OP_WRITE;
|
|
||||||
key.interestOps(interestOps);
|
|
||||||
changed = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 2:
|
case 2:
|
||||||
if (Thread.currentThread() == worker.thread) {
|
interestOps = channel.getInterestOps();
|
||||||
interestOps = key.interestOps();
|
|
||||||
if ((interestOps & SelectionKey.OP_WRITE) != 0) {
|
if ((interestOps & SelectionKey.OP_WRITE) != 0) {
|
||||||
|
if (Thread.currentThread() == worker.thread) {
|
||||||
interestOps &= ~SelectionKey.OP_WRITE;
|
interestOps &= ~SelectionKey.OP_WRITE;
|
||||||
key.interestOps(interestOps);
|
key.interestOps(interestOps);
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
synchronized (worker.selectorGuard) {
|
synchronized (worker.selectorGuard) {
|
||||||
|
if (worker.wakenUp.compareAndSet(false, true)) {
|
||||||
selector.wakeup();
|
selector.wakeup();
|
||||||
interestOps = key.interestOps();
|
}
|
||||||
if ((interestOps & SelectionKey.OP_WRITE) != 0) {
|
|
||||||
interestOps &= ~SelectionKey.OP_WRITE;
|
interestOps &= ~SelectionKey.OP_WRITE;
|
||||||
key.interestOps(interestOps);
|
key.interestOps(interestOps);
|
||||||
changed = true;
|
changed = true;
|
||||||
@ -556,7 +525,7 @@ class NioWorker implements Runnable {
|
|||||||
try {
|
try {
|
||||||
switch (CONSTRAINT_LEVEL) {
|
switch (CONSTRAINT_LEVEL) {
|
||||||
case 0:
|
case 0:
|
||||||
if (key.interestOps() != interestOps) {
|
if (channel.getInterestOps() != interestOps) {
|
||||||
key.interestOps(interestOps);
|
key.interestOps(interestOps);
|
||||||
if (Thread.currentThread() != worker.thread &&
|
if (Thread.currentThread() != worker.thread &&
|
||||||
worker.wakenUp.compareAndSet(false, true)) {
|
worker.wakenUp.compareAndSet(false, true)) {
|
||||||
@ -566,29 +535,16 @@ class NioWorker implements Runnable {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if (key.interestOps() != interestOps) {
|
|
||||||
if (Thread.currentThread() == worker.thread) {
|
|
||||||
key.interestOps(interestOps);
|
|
||||||
changed = true;
|
|
||||||
} else {
|
|
||||||
synchronized (worker.selectorGuard) {
|
|
||||||
selector.wakeup();
|
|
||||||
key.interestOps(interestOps);
|
|
||||||
changed = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 2:
|
case 2:
|
||||||
|
if (channel.getInterestOps() != interestOps) {
|
||||||
if (Thread.currentThread() == worker.thread) {
|
if (Thread.currentThread() == worker.thread) {
|
||||||
if (key.interestOps() != interestOps) {
|
|
||||||
key.interestOps(interestOps);
|
key.interestOps(interestOps);
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
synchronized (worker.selectorGuard) {
|
synchronized (worker.selectorGuard) {
|
||||||
|
if (worker.wakenUp.compareAndSet(false, true)) {
|
||||||
selector.wakeup();
|
selector.wakeup();
|
||||||
if (key.interestOps() != interestOps) {
|
}
|
||||||
key.interestOps(interestOps);
|
key.interestOps(interestOps);
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user