gpt4 book ai didi

java - Vertx 线程模型

转载 作者:行者123 更新时间:2023-12-01 21:13:15 42 4
gpt4 key购买 nike

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

  • 默认情况下,Vert.x 实例维护 N 个事件循环线程(其中 N 默认为 core*2)。
  • 对于许多现代应用程序所需的并发级别,阻塞方法无法扩展

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

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

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

第二个问题 - 我想了解 vert 如何确保单个线程在事件循环中运行,考虑到线程切换/调度是在操作系统级别完成的。我红色this documentation那:

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

  • 处理程序将始终使用同一线程执行
  • 处理程序绝不能阻塞线程,否则它将导致与该事件循环关联的所有 IO 任务陷入饥饿状态。

有人可以澄清一下“处理程序直接在 IO 线程上执行”吗?

最佳答案

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

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

关于java - Vertx 线程模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40746494/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com