Как vert.x является однопоточным?

По моему мнению, каждому экземпляру vert.x будет назначен цикл событий. Цикл событий обрабатывает весь запрос другой задачей для этого конкретного экземпляра. Я думаю, цикл событий - это поток. Когда существует несколько экземпляров vert.x, каждый экземпляр имеет собственные петли событий справа? Это означает, что существует несколько потоков (многопоточность). Вот как я понял. Эта однопоточная концепция вызывает у меня столько головной боли. Любая помощь будет оценена.

2 ответа

Vert.x не является однопоточным, например node.js. В vert.x вы должны различать Verticles и WorkerVerticles. Один экземпляр Vert.x создаст несколько циклов событий (которые являются потоками), как правило, один на процессорный ядро. Verticles будет назначаться циклу событий и всегда будет выполняться одним и тем же потоком, но только если есть работа. WorkerVerticles будет назначен потоку, исходящему из рабочего пула, и может выполняться разными потоками. Что делает программирование забавным с Vert.x, так это то, что вы можете "притворяться" однопоточным. Вам не нужно заботиться о concurrency, потому что вы не можете делиться переменными между вертикалями. Каждая verticle работает в своем собственном загрузчике классов, и вы можете делиться данными только через шину событий. (Существует также общая карта, но это отвлекает в этом случае.)


Вероятно, вы догадались об этом, но я отправляю ответ другим людям, которые могут решить этот вопрос.

Пример vert.x создаст несколько потоков. Внутри экземпляра vert.x у вас есть несколько вершин (вертикальные экземпляры более точно). Это экземпляр verticle, который имеет назначенный цикл событий, но этот цикл события не только назначается этой вершине.

Перекрытия могут возникать, когда вы используете больше вершин, чем количество потоков. В этом случае некоторые из вертиц будут назначены одному и тому же циклу событий, как и другие вершины. Этот цикл событий будет обрабатывать события из всех назначенных вершин.

Но, как только экземпляр verticle запускается и назначается циклу/потоку событий, он будет работать на нем до тех пор, пока не будет прервана вершина.

licensed under cc by-sa 3.0 with attribution.