質問はトロールのように見えるかもしれませんが、verticle自体が専用スレッドで実行されるので、実際にはvert.xが並行性をどのように管理するかについてです。 Javaで書かれたこのシンプルなvert.xのhttpサーバでVert.xは単一の頂点に対して実際の並行性を持っていますか?
見てみましょう:
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);
}
}
は、私の知る限り、ドキュメントを理解して、このファイル全体が垂直方向のを表しています。したがって、startメソッドは専用のverticleスレッド内で呼び出されます。しかし、requestHandlerはどこで呼び出されますか?このスレッドで呼び出された場合は、node.jsよりもどこが良いか分かりません。
私は、ネットワーク/並行性ライブラリvert.xに基づいているNettyにかなり精通しています。 すべての着信接続は、非常にうまくスケーリングする専用のスレッドにマップされます。それで、これは着信接続が同様に頂点を表すことを意味しますか?しかし、どのようにVerticleインスタンス "Server"はそれらのクライアントと通信できますか?実際、このコンセプトはNode.jsに限られていると私は言います。
正しい概念を理解するのを手伝ってください!
よろしく、 クリス
nettyには、スレッドと接続の間に固定されたマッピングがありません。これは、従来のjava.io同期I/Oよりもはるかに優れています。スレッドは、実際の作業がある場合にのみ、スレッドプールから募集されます。 –
私は、頂点の重要な原理は、すべてのイベントが単一のスレッドによって提供されるということです(または、少なくとも、特定の頂点のイベントはすべて順次実行されます)。したがって、Vert.xは単一の頂点に対して並行処理を行いません。それがその点です。 –