이 질문은 트롤처럼 보일지 모르지만 사실 verticle 자체가 전용 스레드에서 실행되기 때문에 vert.x가 동시성을 관리하는 방법에 관한 것입니다. 자바로 작성된이 간단한 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);
}
}
는 지금까지 내가이 문서를 이해,이 모든 파일이 verticle을 나타냅니다. 그래서 시작 메서드는 전용 verticle 스레드 내에서 호출됩니다. 그러나 requestHandler는 어디에서 호출 되었습니까? 이 스레드에서 정확히 호출 된 경우 node.js.보다 어디에서 볼 수 있는지 알 수 없습니다.
나는 네트워크/동시성 라이브러리 vert.x가 기반 인 Netty에 익숙하다. 모든 수신 연결은 전용 스레드로 매핑됩니다.이 스레드는 매우 정교하게 확장됩니다. 그래서 .. 들어오는 연결이 꼭지점을 나타내는 것을 의미합니까? 그렇다면 버티컬 인스턴스 "서버"는 어떻게 그 클라이언트와 통신 할 수 있습니까? 사실이 개념은 Node.js만큼 제한적이라고 말할 수 있습니다.
개념을 이해하는 데 도움주세요.
감사합니다, 크리스
netty에는 스레드와 연결 사이에 고정 된 매핑이 없습니다. 이는 실제로 클래식 java.io 동기 I/O보다 중요한 이점입니다. 실제 작업이있을 때만 스레드 풀에서 스레드가 모집됩니다. –
verticle의 핵심 원리는 모든 이벤트가 단일 스레드에 의해 제공된다는 것입니다 (또는 최소한 특정 verticle에 대한 모든 이벤트가 순차적으로 실행 됨). 따라서 Vert.x는 하나의 verticle에 대해 동시성을 갖지 않으며, 그 점이 중요합니다. –