顶点线程模型

Vertx threading model

我有 2 个问题与 Vertx 线程模型有关。 The documentation 提及:

Vertx 还提供线程池相关的功能来处理使用服务器资源的任务,需要长时间的事件处理(工作线程)。

好的,所以我们知道线程在它们所需的内存(例如它们的堆栈)和上下文切换方面有开销。

Vertx 线程不会被阻塞(如果正确使用的话)但是如果我们得到的事件循环比核心多(以及工作线程的线程池),上下文切换是不是不可避免?

第二个问题-考虑到线程switching/scheduling在OS级别完成的事实,我想了解vert如何确保事件循环的单个线程运行。我在 this documentation 中红色:

事件循环上下文在事件循环上执行处理程序:处理程序直接在 IO 线程上执行,因此:

有人可以澄清一下“handlers are executed directly on the IO threads”吗?

对于你的第一个问题,上下文切换是不可避免的。我们的目标是尽量减少它们,而不是摆脱它们。 事件循环和工作人员的默认数量很好......默认。请注意,有 8 个事件循环并不意味着它们都会被使用。如果您部署一个标准 Verticle 的单个实例,那么只有一个会很忙。

关于你的第二个问题,这意味着事件循环线程处理 Netty(套接字)IO 事件(Vert.x 对开发人员隐藏)以及 Vert.x(连接、请求)事件。实际上,当接收到 HTTP 请求缓冲区时,事件会通过 Netty 和 Vert.x 到达您的应用程序代码。如果阻塞线程,则无法处理以下事件。