优化ClientExecutor
This commit is contained in:
@@ -582,11 +582,9 @@ public final class Application {
|
|||||||
|
|
||||||
ExecutorService workExecutor0 = null;
|
ExecutorService workExecutor0 = null;
|
||||||
ExecutorService clientExecutor;
|
ExecutorService clientExecutor;
|
||||||
{
|
|
||||||
if (executorConf == null) {
|
if (executorConf == null) {
|
||||||
executorConf = DefaultAnyValue.create();
|
executorConf = DefaultAnyValue.create();
|
||||||
}
|
}
|
||||||
final AtomicReference<ExecutorService> workref = new AtomicReference<>();
|
|
||||||
final int workThreads = executorConf.getIntValue("threads", Math.max(2, Utility.cpus()));
|
final int workThreads = executorConf.getIntValue("threads", Math.max(2, Utility.cpus()));
|
||||||
boolean workHash = executorConf.getBoolValue("hash", false);
|
boolean workHash = executorConf.getBoolValue("hash", false);
|
||||||
if (workThreads > 0) {
|
if (workThreads > 0) {
|
||||||
@@ -595,12 +593,14 @@ public final class Application {
|
|||||||
} else {
|
} else {
|
||||||
workExecutor0 = WorkThread.createExecutor(workThreads, "Redkale-WorkThread-%s");
|
workExecutor0 = WorkThread.createExecutor(workThreads, "Redkale-WorkThread-%s");
|
||||||
}
|
}
|
||||||
workref.set(workExecutor0);
|
|
||||||
}
|
}
|
||||||
|
clientExecutor = workExecutor0;
|
||||||
|
if (clientExecutor == null) {
|
||||||
//给所有client给一个默认的ExecutorService
|
//给所有client给一个默认的ExecutorService
|
||||||
final int clientThreads = Math.max(Math.max(2, Utility.cpus()), workThreads / 2);
|
final int clientThreads = Math.max(Math.max(2, Utility.cpus()), workThreads);
|
||||||
clientExecutor = WorkThread.createExecutor(clientThreads, "Redkale-DefaultClient-WorkThread-%s");
|
clientExecutor = WorkThread.createExecutor(clientThreads, "Redkale-DefaultClient-WorkThread-%s");
|
||||||
}
|
}
|
||||||
|
|
||||||
this.workExecutor = workExecutor0;
|
this.workExecutor = workExecutor0;
|
||||||
this.resourceFactory.register(RESNAME_APP_EXECUTOR, Executor.class, this.workExecutor);
|
this.resourceFactory.register(RESNAME_APP_EXECUTOR, Executor.class, this.workExecutor);
|
||||||
this.resourceFactory.register(RESNAME_APP_EXECUTOR, ExecutorService.class, this.workExecutor);
|
this.resourceFactory.register(RESNAME_APP_EXECUTOR, ExecutorService.class, this.workExecutor);
|
||||||
|
|||||||
@@ -223,37 +223,6 @@ public abstract class ClientConnection<R extends ClientRequest, P> implements Co
|
|||||||
workThread = request.workThread;
|
workThread = request.workThread;
|
||||||
request.workThread = null;
|
request.workThread = null;
|
||||||
}
|
}
|
||||||
// if (rs.exc != null) {
|
|
||||||
// if (workThread == null || workThread == Thread.currentThread() || workThread.inIO()
|
|
||||||
// || workThread.getState() != Thread.State.RUNNABLE) {
|
|
||||||
// if (request != null) {
|
|
||||||
// Traces.currTraceid(request.traceid);
|
|
||||||
// }
|
|
||||||
// respFuture.completeExceptionally(rs.exc);
|
|
||||||
// } else {
|
|
||||||
// workThread.execute(() -> {
|
|
||||||
// if (request != null) {
|
|
||||||
// Traces.currTraceid(request.traceid);
|
|
||||||
// }
|
|
||||||
// respFuture.completeExceptionally(rs.exc);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// if (workThread == null || workThread == Thread.currentThread() || workThread.inIO()
|
|
||||||
// || workThread.getState() != Thread.State.RUNNABLE) {
|
|
||||||
// if (request != null) {
|
|
||||||
// Traces.currTraceid(request.traceid);
|
|
||||||
// }
|
|
||||||
// respFuture.complete(rs.message);
|
|
||||||
// } else {
|
|
||||||
// workThread.execute(() -> {
|
|
||||||
// if (request != null) {
|
|
||||||
// Traces.currTraceid(request.traceid);
|
|
||||||
// }
|
|
||||||
// respFuture.complete(rs.message);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
if (workThread == null || workThread.getWorkExecutor() == null) {
|
if (workThread == null || workThread.getWorkExecutor() == null) {
|
||||||
workThread = channel.getReadIOThread();
|
workThread = channel.getReadIOThread();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,8 +13,10 @@ import java.util.function.*;
|
|||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
import org.redkale.annotation.AutoLoad;
|
import org.redkale.annotation.AutoLoad;
|
||||||
import org.redkale.annotation.Comment;
|
import org.redkale.annotation.Comment;
|
||||||
|
import org.redkale.annotation.*;
|
||||||
import org.redkale.annotation.ResourceListener;
|
import org.redkale.annotation.ResourceListener;
|
||||||
import org.redkale.annotation.ResourceType;
|
import org.redkale.annotation.ResourceType;
|
||||||
|
import static org.redkale.boot.Application.RESNAME_APP_EXECUTOR;
|
||||||
import org.redkale.convert.json.JsonConvert;
|
import org.redkale.convert.json.JsonConvert;
|
||||||
import org.redkale.net.WorkThread;
|
import org.redkale.net.WorkThread;
|
||||||
import org.redkale.persistence.Entity;
|
import org.redkale.persistence.Entity;
|
||||||
@@ -110,6 +112,7 @@ public abstract class AbstractDataSource extends AbstractService implements Data
|
|||||||
|
|
||||||
private int sourceThreads = Utility.cpus();
|
private int sourceThreads = Utility.cpus();
|
||||||
|
|
||||||
|
@Resource(name = RESNAME_APP_EXECUTOR, required = false)
|
||||||
private ExecutorService sourceExecutor;
|
private ExecutorService sourceExecutor;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user