servlet的异步和非阻塞原理
之前研究了下servlet的异步和非阻塞原理,看到一篇文章,下面有两个问题,顺便解答了下
servlet3异步原理与实践
Danniel
3楼 2019.05.18 21:31
请问,AsyncLongRunningServlet.java中使用了ThreadPool,其实在Servlet3.0之前,我们不也可以用ThreadPool实现异步(将request和response对象传入即可)吗???这个servlet3.0的异步的真正意义在哪里呢?指教
foolgry
02.26 16:43
将response对象传入自定义线程池中的线程,这个response对象是和tomcat线程池绑定的,也就是说,虽然你异步了,但是tomcat的工作线程还是没有释放,资源还是在占用。而servlet3.0的异步指的是tomcat的工作线程已经还给线程池,这里异步真正的意思是tomcat的工作线程和业务线程的异步,tomcat的工作线程不用同步等待业务线程的结果,而你利用线程池实现的,tomcat的工作线程还是没有释放,还是在同步等待。
所以总结下,
- 异步是针对tomcat的工作线程来说的,不是自己起的异步线程来说
- response对象返回给调用放,需要依赖tomcat的工作线程,自己起异步线程,通过response对象返回,实际上还是通过tomcat的工作线程返回的,在这个过程中,tomcat的工作线程并没有释放。
- tomcat怎么实现的呢,将response对象缓存起来,和tomcat的工作线程不强绑定,当使用异步时,将请求数据给业务线程前,会在事件驱动器注册几个回调,将请求数据给业务线程后,直接将工作线程直接返回给线程池,业务线程超时或者完成任务时,会回调,tomcat会重新拉起(从线程池中取出来一个)工作线程,将缓存的response对象给这个工作线程,完成请求的响应。这里的缓存的response对象是个不准确的说法,因为实际的对象不是这个,而是经过包装的其他对象。
莫那一鲁道
2楼 2018.07.10 00:32
自从Servlet3.1以后增加了非阻塞的IO,这里的非阻塞IO是面向inputstream和outputstream流,通过jdk的事件驱动模型来实现,更一步增强了Servlet异步的高性能,可以认为是一种增强版的异步机制。
如果不是 NIO,如何实现非阻塞呢?事件驱动模型类似观察者模式,但 IO 依然是阻塞的吧?
BIO 也可以实现异步(再加一个线程池就可以了),但他仍然是阻塞的。
NIO + 异步,可以提高系统的并发能力(TCP 连接数),并且 IO 不阻塞。
最后,仍然不是很理解,事件模型怎么能够实现非阻塞 IO?
foolgry
02.26 16:51
阻塞IO和非阻塞IO,区别就是读取文件或者网络的时候,进程或者线程是否停住,不能执行其他的代码,3.0和3.1的区别就是inputstream和outputstream流的读取一个是同步阻塞读取,一个是回调机制 ,你去读,读完了告诉我。你简单想一下就是同步读文件和异步读文件的区别。这里的回调机制依赖于事件模型,所以事件模型能够实现非阻塞IO。
要看这方面的知识,推荐这几篇文章,说的比较清楚
Servlet- 技术专题 -Servlet3 异步原理与实践
tomcat源码简析 异步/非阻塞和请求构成
tomcat servlet3的异步化原理理解
深入剖析通信层和 RPC 调用的异步化(下)
看到一篇tomcat的文章,Servlet 3 性能调优
Servlet 3 性能调优
servlet的异步和非阻塞原理相关推荐
- tornado异步请求非阻塞
前言也许有同学很迷惑:tornado不是标榜异步非阻塞解决10K问题的嘛?但是我却发现不是torando不好,而是你用错了 比如最近发现一个事情:某网 前言 也许有同学很迷惑:tornado不是标榜异 ...
- Python web框架 Tornado(二)异步非阻塞使用以及原理
原文: http://www.liangxiansen.cn/2018/04/11/tornado/ 作者: 梁先森 稍有改动 Tornado默认是单进程单线程.实时的web特性通常需要为每个用户一个 ...
- java处理异步非阻塞请求_Spring WebFlux 的异步非阻塞处理
前言 随着 Web Servlet 技术栈的不断发展实现了异步处理与非阻塞 IO,但是其异步是不彻底的,因为受制于 Servlet 规范本身,比如其规范是同步的(Filter,Servlet)或阻塞( ...
- Spring WebFlux 的异步非阻塞处理
虽然 Web Servlet 技术栈的不断发展实现了异步处理与非阻塞 IO,但是其异步是不彻底的,因为受制于 Servlet 规范本身,比如其规范是同步的(Filter,Servlet)或阻塞(get ...
- java epoll select_Java 非阻塞 IO 和异步 IO
点击上方 Java后端,选择 设为星标 优质文章,及时送达 作者 | HongJie 链接 | javadoop.com/post/nio-and-aio 本文将介绍非阻塞 IO 和异步 IO,也就是 ...
- 非阻塞IO与异步IO
一.非阻塞IO的轮询读写 ---如果当前进程有多个输入终端和多个输出终端呢?while((n=read(STDIN_FILENO,buf,buf_size))>0){ if(write(STDO ...
- 基于MFC的socket编程(异步非阻塞通信)
对于许多初学者来说,网络通信程序的开发,普遍的一个现象就是觉得难以入手.许多概念,诸如:同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)等,初学者往往迷惑不清,只知其 ...
- Java 非阻塞 IO 和异步 IO
转载自 Java 非阻塞 IO 和异步 IO 上一篇文章介绍了 Java NIO 中 Buffer.Channel 和 Selector 的基本操作,主要是一些接口操作,比较简单. 本文将介绍非阻塞 ...
- 聊聊对不同I/O模型的理解 (阻塞/非阻塞IO,同步/异步IO)
一.关于I/O模型的问题 最近通过对ucore操作系统的学习,让我打开了操作系统内核这一黑盒子,与之前所学知识结合起来,解答了长久以来困扰我的关于I/O的一些问题. 1. 为什么redis能以单工作线 ...
最新文章
- Java源码详解二:HashMap源码分析--openjdk java 11源码
- jquery字体颜色_基于jquery实现的web版excel
- h.264 scanning process for transform coefficients
- Netty4服务端和客户端实现
- python装饰器应用论文_python 装饰器应用
- 发外链网站服务器瘫痪,哪些操作可以导致网站接入瘫痪 - 搜外SEO问答
- Android创建项目java报错,创建Android工程时报错:Errors running builder 'Android resource manager' on project '项目...
- 史上最全android分辨率
- learn go return fuction
- ACM第四站————最小生成树(普里姆算法)
- 虾米带你轻松搞定Vuejs 系列
- 【天下有春】剑气纵横三万里,一剑光寒十九洲
- 前端优质网络内容(引用)
- DIV布局`电影在线 网站设计——漫威电影(2页) HTML+CSS+JavaScript 学生DW网页设计作业成品
- C++学习笔记之数字输入及错误处理
- 空洞卷积原理详解及其pytorch代码实现
- (CVPR-2020)动态卷积:注意力卷积核
- Oracle connect by与level的使用
- 计算机专业大学四年的总结
- 前端物联网的起点 node-red 项目的开启