首页 > 其他分享 >SpringBoot是接到一个http请求就开启一个线程处理吗?

SpringBoot是接到一个http请求就开启一个线程处理吗?

时间:2023-07-14 10:12:10浏览次数:40  
标签:http SpringBoot Tomcat 处理 Spring Request 线程 请求

1、跳出一个误区:SpringBoot 不处理任何请求

Spring 本身并不进行 Web 的处理,无论是 TCP 连接也好还是请求和响应也好,这些都是在 Spring 以外的部分完成的,例如 Tomcat,所以默认的 SpringBoot 将会集成 Tomcat 内嵌容器。

Controller 中收到的请求,都是经过 Tomcat 容器解析后交给 Servlet,再由 Servlet 转交给 Controller 的。

2、Tomcat 是如何处理请求的?

一个 Tomcat 也就是一个服务器,服务器将会包含一个或多个 Service,这也就是在 Tomcat 中运行的各个 web 服务,而组成 web 服务的组件,分别为 Connector 和 Container,在 Tomcat 启动 Service 的时候就会初始化它们。

其中 Connector 的作用,顾名思义,用来处理网络的各类链接,对于 Http 服务,那当然是 TCP 连接了。

Connector 的连接建立之后,是能够传输数据的,这些数据将会通过 Servlet 接口的具体实现来进行处理。Servlet 中,可以得到输入流和输出流,如果使用 HttpServlet,那么你可以直接得到 Request 和输出 Response。

Tomcat 采用多线程的方式来处理请求。每当有一个请求到达 Tomcat 服务器时,Tomcat 会为该请求分配一个线程来处理。

在 Tomcat 中,有一个线程池(ThreadPool)用于管理处理请求的线程。当有新的请求到达时,Tomcat 会从线程池中获取一个空闲线程来处理该请求。处理完请求后,该线程会被释放回线程池,以便处理其他请求。

采用多线程模型的好处是能够同时处理多个请求,提高服务器的并发性能。每个线程独立处理一个请求,互不干扰,可以并行执行,提高了服务器的吞吐量。

然而,多线程模型也有一些注意事项。由于每个线程都需要占用一定的系统资源,当并发请求数量过大时,可能会导致服务器资源耗尽,影响性能。因此,在配置 Tomcat 时,需要根据服务器的硬件配置和预期的并发量来调整线程池的大小,以达到最佳的性能和资源利用率。

当请求数量超过 Tomcat 的线程池大小时,多余的请求会被放入一个请求队列中等待处理。

Tomcat 中的请求队列被称为"任务队列"(Task Queue),它是一个先进先出(FIFO)的队列数据结构。当线程池中的线程已经全部被占用时,新的请求会被放入任务队列中等待处理。

任务队列的大小可以通过配置参数进行调整,具体取决于服务器的硬件资源和预期的并发量。如果任务队列已满,而且没有空闲的线程可用来处理新的请求,那么新的请求将会被拒绝,客户端可能会收到连接超时或服务器忙的错误信息。(Tomcat 调优)

3、 Spring 在整个链路中做什么事呢?

Spring Web 定义了一个 DispatcherServlet,这个东西会接收 Request,并且根据用户的配置,转到 Spring 中的 Controller 进行处理。

DispatcherServlet 不在乎这个 Request 的连接,甚至不在乎这个 Request 是谁提供的,只要有一个 Web 服务器,或者说 web 容器提供符合要求的 Request,Spring 的 Web 模块就能使用它,并且把它分发到自己容器内的 Controller 中。

通常来说,Request 里面包含了 InputStream 和 OutputStream,利用他们就足以完成响应了。

这些被 Spring 分发的 Request,他们的连接也当然是被 web 容器管理的,这样的话,是不是一个请求使用一个线程,这个由 web 的容器决定的而不是 Spring。

 

标签:http,SpringBoot,Tomcat,处理,Spring,Request,线程,请求
From: https://www.cnblogs.com/gapu/p/17552913.html

相关文章

  • HTTP协议违背
    HTTP协议违背2.1请求URI过长告警信息:therequestedURL'slengthexceedsthecapacitylimit描述:HTTP请求URI长度超过默认缓冲区大小,认为其不合规2.2 请求头部过长告警信息:requestexceedssystem'slimit描述:HTTP请求头部长度超过默认的缓冲区大小,认为其不合规2.3 ......
  • 使用HttpUtil时报javax.net.ssl.SSLHandshakeException: No appropriate protocol异常
    在使用HttpUtil类时,针对某一个接口报错出现异常HttpGetInforesult=HttpUtil.getInfo(token,Url);但是这个getInfoUrl在postman上调用是成功的后来查找后发现问题是:在Java8及高版本以上的版本在调用ssl时会出现javax.net.ssl.SSLHandshakeException:Noappropriateprotoc......
  • springboot redis工具类之StringRedisTemplate 使用
    1、StringRedisTemplate是什么?StringRedisTemplate继承自RedisTemplate类,实现了BeanClassLoaderAware,Aware,InitializingBean,RedisOperations<K,V>接口。StringRedisTemplate是RedisTemplate以字符串为中心的扩展,由于针对Redis的大多数操作都是基于字符串的,因此此类提供了一个......
  • springboot中使用redis
    1、引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>2、配置spring:redis:host:localhost#Redis服务器地址port:6379......
  • javaSpringboot
    目前最流行的框架,JavaSpring的子项目,由它开发 Springboot依赖管理      配置注解  什么是Javabean 有get和set才叫Javabean springboot自定义配置   由MYconfig这个类进行组件myservice配置将其纳入到Spring中  JavaSpr......
  • 工程开发 | CMake工程目录结构和多线程
    CMake工程目录结构lib:生成的库文件src:源文件(.cpp.cc)include:头文件(.h.hpp)build:一般在这个文件夹下执行cmake..(..之前有一个空格,表示你要使用的CMakeLists.txt文件在当前的上层路径),生成的Makefile文件也在这个路径下。bin:一般放生成的可执行文件CMakeLists.t......
  • 多线程基础
    1.继承Thread类重写run方法启动调用start方法缺点不能继承其他类优点简单2.定义任务类继承 Runnable接口实现 run方法   MyRunable为自定义的任务类 优点可以继承其他类 Runnablet=newMyRunable();newThread(t).start();3.JDK5.0提供了C......
  • Vue项目配置Https双向认证
    访问双向认证的Https接口本地运行设置修改webpack配置 jsconstfs=require('fs')constoptions={//客户端密钥key:fs.readFileSync(path.join(__dirname,'../ca/key.pem')),//客户端公钥cert:fs.readFileSync(path.join(__dirname,'../ca......
  • vue配置https
    constpath=require('path');constfs=require('fs');consthttps=require('https');constoptions={key:fs.readFileSync(path.join(__dirname,'./ca/client.key')),cert:fs.readFileSync(path.join(__dirname,......
  • 六月学习之Haproxy高级功能(自定义HTTP报文)
    6、Haproxy高级功能6.8、自定义HTTP报文6.8.1、reqaddreqadd<string>[{if|unless}<crond>]在请求报文中添加指定首部实现原理:client-->haproxy-->reqadd(添加header)-->web1、在frontend中使用reqadd,将发往后端集群的请求中添加一个headercat/etc/haproxy/haproxy.cfgf......