Vertx ExecuteBlocking использует цикл событий вместо рабочего потокаJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Vertx ExecuteBlocking использует цикл событий вместо рабочего потока

Сообщение Anonymous »


Я исходю из концепции один запрос = один поток, и теперь я хочу понять концепцию цикла событий с использованием Vertx. Согласно документации, если мы используем операцию блокировки, мы должны передать ее методу executeBlocking.

Вертикулы используют рабочий пул Vert.x для выполнения блокирующих действий, т. е. ExecuteBlocking или рабочая вершина. У меня есть несколько вопросов по этому абзацу из http://vertx.io/docs/vertx-core/groovy/

Это мой код:

публичный класс JdbcVertx расширяет AbstractVerticle{ public static void main(String[] args) { Vertx v = Vertx.vertx(); v.deployVerticle(new JdbcVertx(),new DeploymentOptions().setWorkerPoolSize(10)); } @Override public void start() выдает исключение { Клиент JDBCClient = JDBCClient.createNonShared(this.vertx, new JsonObject() .put("url", "jdbc:postgresql://localhost:5432/test") .put("пользователь", "postgres") .put("пароль", "пароль") .put("driver_class", "org.postgresql.Driver") .put("max_pool_size", 30)); this.vertx.createHttpServer() .requestHandler(r -> { int я = (int) (Math.random() * 100); System.out.println("Идентификатор запроса: " + i+ " "+Thread.currentThread().getName()); client.getConnection(обработчик -> { если (handler.failed()) { выдать новое RuntimeException(handler.cause()); } еще { окончательное соединение SQLConnection = handler.result(); this.vertx.executeBlocking(blockingCodeHandler->{ Connection.execute(execute(), hndlr -> { Connection.close(closehndlr -> { если (closehndlr.failed()) { выбросить новое RuntimeException(closehndlr.cause()); } еще { System.out.println("CON end: "+i+" "+Thread.currentThread().getName()); r.response().putHeader("тип контента", "текст/html").end("Ответ: " + i); } }); }); },false,as->{}); } }); }).слушать(8080); } частная строка выполнить () { return «вставить в мусор (имя) значения («тест»)»; } Я отправляю 100 запросов на http-сервер, вот что:

Идентификатор запроса: 45 vert.x-eventloop-thread-0 Идентификатор запроса: 22 vert.x-eventloop-thread-0 Идентификатор запроса: 96 vert.x-eventloop-thread-0 Идентификатор запроса: 85 vert.x-eventloop-thread-0 Идентификатор запроса: 33 vert.x-eventloop-thread-0 Конец CON: 22 vert.x-eventloop-thread-0 Конец CON: 33 vert.x-eventloop-thread-0 Конец CON: 45 vert.x-eventloop-thread-0 Конец CON: 85 vert.x-eventloop-thread-0 1) Как цикл событий переключается между запросами (на выходе он сначала получает несколько запросов, а затем выдает на них ответы)?

2)Я использую метод executeBlocking, но, как вы можете видеть, код выше использует только поток цикла событий с именем vert.x-eventloop-thread-0

3) Согласно первому вопросу, цикл событий vertx переключается между запросами, но если я изменю метод execute на:

частная строка выполнить(){ Thread.sleep(3000); return «вставить в мусор (имя) значения («тест»)»; } Цикл событий остановится до тех пор, пока не истечет время ожидания

Заранее спасибо
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»