gpt4 book ai didi

spring - 每个请求模型的事件循环和线程之间的区别

转载 作者:行者123 更新时间:2023-11-28 23:10:59 25 4
gpt4 key购买 nike

根据我的研究,我发现在每个请求线程模型中,每个请求都会产生一个新线程。假设我有 100 个请求,我将同时运行 100 个线程。来到事件循环模型(类似于 spring webflux),我们有一个主线程来监听请求并将任务委托(delegate)给其他线程。现在假设我们在事件循环模型上有 100 个请求。在这里,主线程可以自由监听,但它也有等待来自数据库或网络的响应的线程,就像每个请求模型的线程一样。它如何使事件循环模型更具可扩展性。

最佳答案

带有 Servlet API < 3.1 的 Tomcat 和由 Spring WebFlux 驱动的 Netty 服务器之间的主要区别在于处理 IO 和请求的方式:阻塞或非阻塞。
Spring WebFlux赞成第二种方法:

Part of the answer is the need for a non-blocking web stack to handle concurrency with a small number of threads and scale with fewer hardware resources.

总而言之,通过使用 Spring WebFlux API,将为尽可能多的客户端 http 请求创建更少的线程,因为线程不是专用于此模型中的单个客户端 http 请求。
无阻塞方法意味着:无论处理请求的时间如何,处理该请求的线程都不会阻塞应用程序并使线程等待很长时间,但会在这段时间内处理另一个请求。

举个例子:你的 Rest 或 Mvc Controller 收到一个请求,要执行的任务的本质是请求数据库。使用阻塞方法,您可以通过 http 请求创建一个线程。使用无阻塞方法,线程委托(delegate)给数据库,可以服务于其他请求,并且该线程或池中的另一个线程将在与数据库的交互完成时继续处理。

关于spring - 每个请求模型的事件循环和线程之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58138251/

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