代码之家  ›  专栏  ›  技术社区  ›  Zveratko

经典vs反应方法中的连接、请求和线程

  •  0
  • Zveratko  · 技术社区  · 7 年前

    1. 将创建来自浏览器的连接。
    2. 对于每个请求,线程池中的线程都被获取,线程池将对其进行处理。
    3. 线程完成处理后,它通过连接将结果返回到另一端。

    反应性 ???

    这是如何为Tomcat或Netty做的。我找不到任何关于Tomcat如何支持反应式应用程序以及Netty如何以不同方式支持的像样文章(连接、线程、请求级别解释)

    让我困扰的是,当您仍然需要等待响应时,使web服务器解除阻塞是多么被动。你可以更快地得到第一部分的反应,也许是反应,但这一切呢?我想反应的主要点是有效的线程利用率,这就是我要问的。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Ashish    7 年前

    最后一点:“我想反应性的主要点是有效的线程利用率,这正是我要问的。”这正是反应性方法的设计目的。

    作为一个例子,假设您多次从服务器请求数据。

    以典型的非反应式方式,您将为每个请求创建/使用多个线程(可能来自线程池)。而一个特定线程的工作只是为那个特定的请求服务。线程将接收请求,将其提供给服务器并等待其响应,直到从服务器获取数据,然后将该数据带回客户端。

    现在,以一种被动的方式,一旦有请求,就会为它分配一个线程。现在,如果出现另一个请求,则不会创建另一个线程,而是由同一个线程提供服务。怎么用? 线程在向服务器接收请求时,不会等待服务器的任何即时响应,而是返回并服务于其他请求。 现在,当服务器搜索数据并且它可以与服务器一起使用时,将引发一个事件,然后线程将去获取该数据。这称为事件循环机制,因为在数据可用时调用线程的所有工作都是通过调用事件来实现的。 现在,它被赋予了将精确响应映射到请求的复杂性。 所以整个过程都是无阻塞的。由于只有一个线程可以满足所有的请求,因此不会有线程切换,我们可以为每个CPU内核提供一个线程。从而实现线程的有效利用。

    enter image description here

    enter image description here

    enter image description here

    enter image description here