la domanda potrebbe sembrare un troll, ma in realtà è su come vert.x gestisce la concorrenza dal momento che un vertice stesso viene eseguito in un thread dedicato. sguardoVert.x ha concurrency reale per i singoli vertici?
Let a questo semplice server http vert.x scritto in Java:
import org.vertx.java.core.Handler;
import org.vertx.java.core.http.HttpServerRequest;
import org.vertx.java.platform.Verticle;
public class Server extends Verticle {
public void start() {
vertx.createHttpServer().requestHandler(new Handler<HttpServerRequest>() {
public void handle(HttpServerRequest req) {
req.response().end("Hello");
}
}).listen(8080);
}
}
Per quanto ho capito la documentazione, tutto questo file rappresenta un verticle. Quindi il metodo di avvio è chiamato all'interno del thread dedicato del verticle, finora tutto bene. Ma dov'è la richiesta di Handler? Se è invocato su esattamente questo thread non riesco a vedere dove è meglio di node.js.
Sono abbastanza familiare con Netty, che è la libreria di rete/concorrenza su cui vert.x è basata. Ogni connessione in entrata viene mappata su un thread dedicato che si adatta in modo soddisfacente. Quindi ... questo significa che le connessioni in ingresso rappresentano anche i vertici? Ma come può quindi l'istanza verticle "Server" comunicare con quei client? In realtà direi che questo concetto è limitato come Node.js.
Per favore aiutami a capire bene i concetti!
saluti, Chris
In netty non esiste una mappatura fissa tra thread e connessioni --- questo è in effetti il suo vantaggio principale rispetto al classico I/O sincrono java.io. I thread sono reclutati da un pool di thread solo quando c'è del lavoro da fare. –
Penso che un principio chiave di un vertice sia che ogni evento è servito da un singolo thread (o almeno che ogni singolo evento per uno specifico vertice viene eseguito in sequenza). Quindi, no, Vert.x * non * ha concorrenza per un singolo vertice, e questo è il punto. –