Browse Source

change threadNum (#7878)

* update smart-servlet to 0.1.3-SNAPSHOT

* update aio-enhance to 1.0.3-SNAPSHOT

* smart-servlet bugfix

* bugfix

* update smart-socket to 1.5.6-SNAPSHOT

* remove file

* update aio-enhance to 1.0.4-SNAPSHOT

* 优化代码

* 优化代码

* update smart-socket to 1.5.6

* config threadNum

* update smart-socket to 1.5.7-SNAPSHOT

* 优化代码

* update smart-socket to 1.5.10-SNAPSHOT

* 优化代码

* 优化代码

* 优化代码

* 异常aio-enhance

* 优化代码

* 优化代码

* 优化代码

* remove aio-pro

* remove headerLimiter

* update hikaricp version

* replace json util

* 更新线程模型

* upgrade smart-servlet to 0.1.9-SNAPSHOT

* config thread num

* config thread num
三刀 2 years ago
parent
commit
bf9df9dbda

+ 6 - 6
frameworks/Java/smart-socket/src/main/java/org/smartboot/http/Bootstrap.java

@@ -29,7 +29,7 @@ public class Bootstrap {
     static byte[] body = "Hello, World!".getBytes();
 
     public static void main(String[] args) {
-        ExecutorService executorService = new ThreadPoolExecutor(1, 1,
+        ExecutorService executorService = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(), Runtime.getRuntime().availableProcessors(),
                 0L, TimeUnit.MILLISECONDS,
                 new ArrayBlockingQueue<>(128), new ThreadPoolExecutor.CallerRunsPolicy());
         HttpRouteHandler routeHandle = new HttpRouteHandler();
@@ -57,7 +57,7 @@ public class Bootstrap {
                         });
                     }
                 });
-        initDB(routeHandle);
+        initDB(routeHandle,executorService);
         int cpuNum = Runtime.getRuntime().availableProcessors();
         // 定义服务器接受的消息类型以及各类消息对应的处理器
         HttpBootstrap bootstrap = new HttpBootstrap();
@@ -70,7 +70,7 @@ public class Bootstrap {
         bootstrap.httpHandler(routeHandle).setPort(8080).start();
     }
 
-    private static void initDB(HttpRouteHandler routeHandle) {
+    private static void initDB(HttpRouteHandler routeHandle,ExecutorService executorService) {
         try {
             Class.forName("org.postgresql.Driver");
         } catch (ClassNotFoundException e) {
@@ -85,9 +85,9 @@ public class Bootstrap {
         config.addDataSourceProperty("prepStmtCacheSize", "250");
         config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
         DataSource dataSource = new HikariDataSource(config);
-        routeHandle.route("/db", new SingleQueryHandler(dataSource))
-                .route("/queries", new MultipleQueriesHandler(dataSource))
-                .route("/updates", new UpdateHandler(dataSource));
+        routeHandle.route("/db", new SingleQueryHandler(dataSource,executorService))
+                .route("/queries", new MultipleQueriesHandler(dataSource,executorService))
+                .route("/updates", new UpdateHandler(dataSource,executorService));
 //                .route("/fortunes", new FortunesHandler(dataSource));
     }
 }

+ 32 - 22
frameworks/Java/smart-socket/src/main/java/org/smartboot/http/MultipleQueriesHandler.java

@@ -11,6 +11,8 @@ import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ThreadLocalRandom;
 
 /**
@@ -19,34 +21,42 @@ import java.util.concurrent.ThreadLocalRandom;
  */
 public class MultipleQueriesHandler extends HttpServerHandler {
     private DataSource dataSource;
+    private ExecutorService executorService;
 
-    public MultipleQueriesHandler(DataSource dataSource) {
+    public MultipleQueriesHandler(DataSource dataSource, ExecutorService executorService) {
         this.dataSource = dataSource;
+        this.executorService = executorService;
     }
 
     @Override
-    public void handle(HttpRequest httpRequest, HttpResponse response) throws IOException {
-        int queries = Math.min(Math.max(NumberUtils.toInt(httpRequest.getParameter("queries"), 1), 1), 500);
-        World[] worlds = new World[queries];
-        try (Connection connection = dataSource.getConnection();
-             PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM World WHERE id=?");) {
-
-            for (int i = 0; i < queries; i++) {
-                preparedStatement.setInt(1, getRandomNumber());
-                ResultSet resultSet = preparedStatement.executeQuery();
-                resultSet.next();
-                World world = new World();
-                world.setId(resultSet.getInt(1));
-                world.setRandomNumber(resultSet.getInt(2));
-                worlds[i] = world;
-                preparedStatement.clearParameters();
-            }
+    public void handle(HttpRequest request, HttpResponse response, CompletableFuture<Object> completableFuture) throws IOException {
+        executorService.execute(() -> {
+            try {
+                int queries = Math.min(Math.max(NumberUtils.toInt(request.getParameter("queries"), 1), 1), 500);
+                World[] worlds = new World[queries];
+                try (Connection connection = dataSource.getConnection();
+                     PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM World WHERE id=?");) {
+
+                    for (int i = 0; i < queries; i++) {
+                        preparedStatement.setInt(1, getRandomNumber());
+                        ResultSet resultSet = preparedStatement.executeQuery();
+                        resultSet.next();
+                        World world = new World();
+                        world.setId(resultSet.getInt(1));
+                        world.setRandomNumber(resultSet.getInt(2));
+                        worlds[i] = world;
+                        preparedStatement.clearParameters();
+                    }
 
-        } catch (SQLException throwables) {
-            throwables.printStackTrace();
-        }
-        response.setContentType("application/json");
-        JsonUtil.writeJsonBytes(response, worlds);
+                } catch (SQLException throwables) {
+                    throwables.printStackTrace();
+                }
+                response.setContentType("application/json");
+                JsonUtil.writeJsonBytes(response, worlds);
+            } finally {
+                completableFuture.complete(null);
+            }
+        });
     }
 
     protected int getRandomNumber() {

+ 26 - 15
frameworks/Java/smart-socket/src/main/java/org/smartboot/http/SingleQueryHandler.java

@@ -10,6 +10,8 @@ import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ThreadLocalRandom;
 
 /**
@@ -19,25 +21,34 @@ import java.util.concurrent.ThreadLocalRandom;
 public class SingleQueryHandler extends HttpServerHandler {
     private DataSource dataSource;
 
-    public SingleQueryHandler(DataSource dataSource) {
+    private ExecutorService executorService;
+
+    public SingleQueryHandler(DataSource dataSource, ExecutorService executorService) {
         this.dataSource = dataSource;
+        this.executorService = executorService;
     }
 
     @Override
-    public void handle(HttpRequest httpRequest, HttpResponse response) throws IOException {
-        World world = new World();
-        try (Connection connection = dataSource.getConnection();
-             PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM World WHERE id=?");) {
-            preparedStatement.setInt(1, getRandomNumber());
-            ResultSet resultSet = preparedStatement.executeQuery();
-            resultSet.next();
-            world.setId(resultSet.getInt(1));
-            world.setRandomNumber(resultSet.getInt(2));
-        } catch (SQLException throwables) {
-            throwables.printStackTrace();
-        }
-        response.setContentType("application/json");
-        JsonUtil.writeJsonBytes(response, world);
+    public void handle(HttpRequest request, HttpResponse response, CompletableFuture<Object> completableFuture) throws IOException {
+        executorService.execute(() -> {
+            try {
+                World world = new World();
+                try (Connection connection = dataSource.getConnection();
+                     PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM World WHERE id=?");) {
+                    preparedStatement.setInt(1, getRandomNumber());
+                    ResultSet resultSet = preparedStatement.executeQuery();
+                    resultSet.next();
+                    world.setId(resultSet.getInt(1));
+                    world.setRandomNumber(resultSet.getInt(2));
+                } catch (SQLException throwables) {
+                    throwables.printStackTrace();
+                }
+                response.setContentType("application/json");
+                JsonUtil.writeJsonBytes(response, world);
+            } finally {
+                completableFuture.complete(null);
+            }
+        });
     }
 
     protected int getRandomNumber() {

+ 44 - 34
frameworks/Java/smart-socket/src/main/java/org/smartboot/http/UpdateHandler.java

@@ -12,6 +12,8 @@ import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.StringJoiner;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ThreadLocalRandom;
 
 /**
@@ -20,49 +22,57 @@ import java.util.concurrent.ThreadLocalRandom;
  */
 public class UpdateHandler extends HttpServerHandler {
     private DataSource dataSource;
+    private ExecutorService executorService;
 
-    public UpdateHandler(DataSource dataSource) {
+    public UpdateHandler(DataSource dataSource, ExecutorService executorService) {
         this.dataSource = dataSource;
+        this.executorService = executorService;
     }
 
     @Override
-    public void handle(HttpRequest httpRequest, HttpResponse response) throws IOException {
-        int queries = Math.min(Math.max(NumberUtils.toInt(httpRequest.getParameter("queries"), 1), 1), 500);
-        World[] worlds = new World[queries];
-        StringJoiner updateSql = new StringJoiner(
-                ", ",
-                "UPDATE world SET randomnumber = temp.randomnumber FROM (VALUES ",
-                " ORDER BY 1) AS temp(id, randomnumber) WHERE temp.id = world.id");
-        try (Connection connection = dataSource.getConnection()) {
+    public void handle(HttpRequest httpRequest, HttpResponse response, CompletableFuture<Object> completableFuture) throws IOException {
+        executorService.execute(() -> {
+            try {
+                int queries = Math.min(Math.max(NumberUtils.toInt(httpRequest.getParameter("queries"), 1), 1), 500);
+                World[] worlds = new World[queries];
+                StringJoiner updateSql = new StringJoiner(
+                        ", ",
+                        "UPDATE world SET randomnumber = temp.randomnumber FROM (VALUES ",
+                        " ORDER BY 1) AS temp(id, randomnumber) WHERE temp.id = world.id");
+                try (Connection connection = dataSource.getConnection()) {
 
-            try (PreparedStatement queryPreparedStatement = connection.prepareStatement("SELECT * FROM World WHERE id=?");) {
-                for (int i = 0; i < queries; i++) {
-                    queryPreparedStatement.setInt(1, getRandomNumber());
-                    ResultSet resultSet = queryPreparedStatement.executeQuery();
-                    resultSet.next();
-                    World world = new World();
-                    world.setId(resultSet.getInt(1));
-                    world.setRandomNumber(getRandomNumber());
-                    worlds[i] = world;
-                    queryPreparedStatement.clearParameters();
-                    updateSql.add("(?, ?)");
-                }
-            }
+                    try (PreparedStatement queryPreparedStatement = connection.prepareStatement("SELECT * FROM World WHERE id=?");) {
+                        for (int i = 0; i < queries; i++) {
+                            queryPreparedStatement.setInt(1, getRandomNumber());
+                            ResultSet resultSet = queryPreparedStatement.executeQuery();
+                            resultSet.next();
+                            World world = new World();
+                            world.setId(resultSet.getInt(1));
+                            world.setRandomNumber(getRandomNumber());
+                            worlds[i] = world;
+                            queryPreparedStatement.clearParameters();
+                            updateSql.add("(?, ?)");
+                        }
+                    }
 
-            try (PreparedStatement preparedStatement = connection.prepareStatement(updateSql.toString());) {
-                int i = 0;
-                for (World world : worlds) {
-                    preparedStatement.setInt(++i, world.getId());
-                    preparedStatement.setInt(++i, world.getRandomNumber());
+                    try (PreparedStatement preparedStatement = connection.prepareStatement(updateSql.toString());) {
+                        int i = 0;
+                        for (World world : worlds) {
+                            preparedStatement.setInt(++i, world.getId());
+                            preparedStatement.setInt(++i, world.getRandomNumber());
+                        }
+                        preparedStatement.executeUpdate();
+                    }
+
+                } catch (SQLException throwables) {
+                    throwables.printStackTrace();
                 }
-                preparedStatement.executeUpdate();
+                response.setContentType("application/json");
+                JsonUtil.writeJsonBytes(response, worlds);
+            } finally {
+                completableFuture.complete(null);
             }
-
-        } catch (SQLException throwables) {
-            throwables.printStackTrace();
-        }
-        response.setContentType("application/json");
-        JsonUtil.writeJsonBytes(response, worlds);
+        });
     }
 
     protected int getRandomNumber() {