Java 为什么Vert.x被称为响应型,即使它是单线程的

Java 为什么Vert.x被称为响应型,即使它是单线程的,java,multithreading,asynchronous,vert.x,Java,Multithreading,Asynchronous,Vert.x,我从Vert.x文档(以及其中的一些代码)中了解到,Vert.x是单线程的,在事件池中执行事件。它不等待I/O或任何网络操作,而是给另一个事件时间(这在任何Java多线程框架中都没有) 但我无法理解以下内容: 单线程如何优于多线程?如果有数百万个传入的HTTP请求呢?它不会比其他多线程框架慢吗 垂直板取决于CPU核。你有多少个CPU核,你就可以有多少个垂直板并行运行。为什么在虚拟机上工作的语言可以根据需要使用CPU?据我所知,JavaVM(JVM)是一个只使用另一个OS进程的应用程序(这里我对O

我从Vert.x文档(以及其中的一些代码)中了解到,Vert.x是单线程的,在事件池中执行事件。它不等待I/O或任何网络操作,而是给另一个事件时间(这在任何Java多线程框架中都没有)

但我无法理解以下内容:

  • 单线程如何优于多线程?如果有数百万个传入的HTTP请求呢?它不会比其他多线程框架慢吗
  • 垂直板取决于CPU核。你有多少个CPU核,你就可以有多少个垂直板并行运行。为什么在虚拟机上工作的语言可以根据需要使用CPU?据我所知,JavaVM(JVM)是一个只使用另一个OS进程的应用程序(这里我对OS和JVM的理解较少,因此我的问题可能很幼稚)
  • 如果单线程、非阻塞概念如此有效,那么为什么我们不能在多线程环境中使用相同的非阻塞概念呢?不是更快吗?或者,这是因为CPU一次可以执行一个线程吗
  • 我从Vert.x文档(以及其中的一些代码)中了解到,Vert.x是单线程的,在事件池中执行事件

    它是事件驱动的,基于回调:

    每个Vertx实例维护多个事件循环,而不是单个事件循环。默认情况下,我们根据机器上可用的内核数量选择该数量,但这可以被覆盖

    它不等待I/O或任何网络操作

    它使用非阻塞或异步I/O,不清楚是哪一种。使用反应器模式表明无阻塞,但可能不是

    而不是给另一个事件时间(这在任何Java多线程框架中都没有)

    这是毫无意义的

  • 单线程如何优于多线程
  • 事实并非如此

    如果有数百万个传入的HTTP请求呢?它不会比其他多线程框架慢吗

  • 垂直板取决于CPU核。你有多少个CPU核,你就可以有多少个垂直板并行运行。为什么在虚拟机上工作的语言可以根据需要使用CPU?据我所知,JavaVM(JVM)是一个只使用另一个OS进程的应用程序(这里我对OS和JVM的理解较少,因此我的问题可能很幼稚)
  • 根据上面的引文,它在每个核心上使用一个线程,或者通过覆盖该线程来选择任何线程

  • 如果单线程、非阻塞概念如此有效,那么为什么我们不能在多线程环境中使用相同的非阻塞概念呢
  • 你可以

    不是更快吗

    或者,这是因为CPU一次可以执行一个线程吗

    多核CPU一次可以执行多个线程。我不知道“it”中的“it”是什么,因为“it”指的是什么

    我从Vert.x文档(以及其中的一些代码)中了解到,Vert.x是单线程的,在事件池中执行事件

    它是事件驱动的,基于回调:

    每个Vertx实例维护多个事件循环,而不是单个事件循环。默认情况下,我们根据机器上可用的内核数量选择该数量,但这可以被覆盖

    它不等待I/O或任何网络操作

    它使用非阻塞或异步I/O,不清楚是哪一种。使用反应器模式表明无阻塞,但可能不是

    而不是给另一个事件时间(这在任何Java多线程框架中都没有)

    这是毫无意义的

  • 单线程如何优于多线程
  • 事实并非如此

    如果有数百万个传入的HTTP请求呢?它不会比其他多线程框架慢吗

  • 垂直板取决于CPU核。你有多少个CPU核,你就可以有多少个垂直板并行运行。为什么在虚拟机上工作的语言可以根据需要使用CPU?据我所知,JavaVM(JVM)是一个只使用另一个OS进程的应用程序(这里我对OS和JVM的理解较少,因此我的问题可能很幼稚)
  • 根据上面的引文,它在每个核心上使用一个线程,或者通过覆盖该线程来选择任何线程

  • 如果单线程、非阻塞概念如此有效,那么为什么我们不能在多线程环境中使用相同的非阻塞概念呢
  • 你可以

    不是更快吗

    或者,这是因为CPU一次可以执行一个线程吗


    多核CPU一次可以执行多个线程。我不知道“it”中的“it”是什么,因为“it”指的是什么。

    首先,Vertx无论如何都不是单线程的。它只是不能产生所需的更多线程

    其次,这与Vertx完全无关,JVM将线程映射到本机OS线程

    第三,我们可以在多线程环境中实现非阻塞行为。不是每个CPU一个线程,而是每个核心一个线程。

    但问题是:“这些线程在做什么?”。因为通常情况下,他们需要其他资源才能发挥作用。网络、数据库、文件系统、内存。这就变得很棘手了。当您是单线程时,您没有竞争条件。在任何时候访问内存的只有你自己。但是,如果您是多线程的,您需要关注互斥体,或者任何其他保持数据一致性的方法

    首先,Vertx无论如何都不是单线程的。它只是不能产生所需的更多线程

    其次,这与Vertx完全无关,JVM将线程映射到本机OS线程

    第三,我们可以在多线程环境中实现非阻塞行为。不是每个CPU一个线程,而是每个核心一个线程。
    但是