当前位置: 首页 > 知识库问答 >
问题:

Vert.x是单线程的吗?

徐奇
2023-03-14

根据我的理解,每个Vert.x实例都将被分配一个事件循环。事件循环处理该特定实例的所有请求和其他任务。事件循环是一个线程,我认为。当部署了多个Vert.x实例时,每个实例都有自己的事件循环,对吗?这意味着存在多个线程(multi-threading)。我就是这么理解的。这个单线程概念让我非常头疼。任何帮助都将不胜感激。

共有1个答案

符俊材
2023-03-14

Vert.x不像Node.js那样是单线程的。在vert.x中,必须区分Verticles和WorkerVerticles。一个Vert.x实例将创建多个事件循环(即线程),通常每个CPU核心创建一个事件循环。Verticles将被分配给一个事件循环,并且总是由同一个线程执行,但只有在有工作要做的情况下才会执行。WorkerVerticles将被分配给来自工作者池的线程,并且可以由不同的线程执行。让Vert.x编程变得有趣的是,您可以“假装”它是单线程的。您不必关心并发性,因为您不能在轮之间共享变量。每个垂直运行在它自己的类加载器中,您只能通过事件总线共享数据。(还有一个共享映射,但在本例中这会让人分心。)

 类似资料:
  • 我正在使用vert。x 2.1.5版本。我试图在我的项目中使用事件循环。下面给出了示例代码 在此代码中,我的事件总线在执行事件循环之前返回值。我需要根据事件循环输出填充我的输出 如何实现

  • 最近我开始学习、和非阻塞Java框架,其中一个引起了我的注意——。 我想,同样的问题可能适用于akka(Play框架),因为他们的理念或目标之一是相同的,那就是减少线程数量,从而提高应用程序的可扩展性。 建议它所消耗的线程数与CPU内核数相当,但它也表明,有时您必须执行阻塞操作,因此它鼓励开发人员在单独的工作线程上执行阻塞操作(垂直于vert.x的工作线程)。 这就是我要问的问题: 如果我应该在一

  • 问题内容: Scrapy中很少有并发设置,例如CONCURRENT_REQUESTS。这意味着Scrapy搜寻器是多线程的吗?因此,如果我运行它,将在字面上并行触发多个同时请求?我问是因为,我读过Scrapy是单线程的。 问题答案: Scrapy是单线程的,除了交互式外壳程序和一些测试之外,请参见source。 它建立在Twisted的基础上,Twisted也是单线程的,并且利用了它自己的异步并发

  • Redis6.0之前是单线程的,Redis6.0之后开始支持多线程; redis内部使用了基于epoll的多路服用,也可以多部署几个redis服务器解决单线程的问题; redis主要的性能瓶颈是内存和网络; 内存好说,加内存条就行了,而网络才是大麻烦,所以redis6内存好说,加内存条就行了; 而网络才是大麻烦,所以redis6.0引入了多线程的概念, redis6.0在网络IO处理方面引入了多线

  • 问题内容: Node.js通过使用事件循环而不是线程,将基于事件的模型置于核心,从而解决了“每个连接一个线程的问题”。所有昂贵的I / O操作始终与在启动操作完成时执行的回调异步执行。 如果发生任何操作,则由epoll()之类的多路复用机制处理该观察。 我的问题是: 为什么在使用阻塞系统调用select / epoll / kqueue时NodeJS不阻塞? 还是根本不是NodeJS单线程,因此需

  • 给定以下代码: 如果kafka消费者是Vert. x Kafka消费者,我希望 会发生在Reactive IO线程上。但是,它在Vert. x事件循环线程上执行。当我运行以下测试类时,相同的场景按照预期在IO线程上运行map方法。 是什么导致线程执行中出现这种差异?