2017-08-10 89 views
0

我从Vert.x文档(及其中的一点编码)中了解到Vert.x是单线程并执行中的事件活动池。它不等待I/O或任何网络操作,而不是等待另一个事件(这在以前的任何Java多线程框架中都没有)。为什么Vert.x调用响应,即使它是单线程的

但我不明白以下几点:

  1. 如何单线程是优于多线程?如果有数以百万计的传入HTTP请求会怎么样?它不会比其他多线程框架慢吗?
  2. Verticles依赖于CPU核心。尽可能多的CPU核心,可以有许多垂直并行运行的垂直。在虚拟机上运行的语言如何根据需要使用CPU?据我所知,Java VM(JVM)是​​一个只使用另一个OS进程的应用程序(这里我的理解不太关于操作系统和JVM,因此我的问题可能太天真了)。
  3. 如果单线程非阻塞概念如此有效,那么为什么我们不能在多线程环境中使用相同的非阻塞概念?它会不会更快?或者再一次,是因为CPU一次可以执行一个线程?
+2

你为什么认为Vertx是单线程? –

+1

你的第二点直接抵触你声称vert.x是单线程的 – UnholySheep

+0

#3也是不正确的。没有什么能阻止你在多线程环境中使用非阻塞I/O。 – EJP

回答

3

我从Vert.x文档(和它编码的一点点)了解什么是Vert.x是单线程并执行事件池事件。

它是事件驱动的基于回调的。 It isn't single-threaded

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

它不等待I/O或任何网络操作(多个)

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

而不是给任何Java多线程框架中的其他事件(这在以前没有)。

这没有意义。

  1. 单线程如何比多线程更好?

它不是。

如果有数以百万计的传入HTTP请求会怎么样?它不会比其他多线程框架慢吗?

是的。

  1. 垂直取决于CPU核心。尽可能多的CPU核心,可以有许多垂直并行运行的垂直。在虚拟机上运行的语言如何根据需要使用CPU?据我所知,Java VM(JVM)是​​一个只使用另一个OS进程的应用程序(这里我的理解不太关于操作系统和JVM,因此我的问题可能太天真了)。

它采用每核心线程,按照上面的报价,或任何你通过覆盖该选择。

  • 如果一个单线程的,无阻塞的概念是如此有效,然后我们为什么不能在多线程environemnt相同非阻塞概念?
  • 您可以。

    这不是更快吗?

    是的。

    还是,因为CPU一次可以执行一个线程?

    多核CPU一次可以执行多个线程。我不知道这是因为'是什么'。

    0

    首先,Vertx不是以任何方式单线程的。它只是不会产生它需要的更多线程。其次,这与Vertx根本无关,JVM将线程映射到本机操作系统线程。

    第三,我们可以在多线程环境下有非阻塞行为。它不是每个CPU一个线程,而是每个核心一个线程。
    但问题是:“那些线程在做什么?”。通常,为了有用,他们需要其他资源。网络,数据库,文件系统,内存。在这里它变得棘手。当你单线程时,你没有竞争条件。在任何时间点访问内存的唯一人是你。但是,如果你是多线程的,你需要关心互斥锁或其他任何保持数据一致性的方式。

    相关问题