之前研究了下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的工作线程还是没有释放,还是在同步等待。

所以总结下,

  1. 异步是针对tomcat的工作线程来说的,不是自己起的异步线程来说
  2. response对象返回给调用放,需要依赖tomcat的工作线程,自己起异步线程,通过response对象返回,实际上还是通过tomcat的工作线程返回的,在这个过程中,tomcat的工作线程并没有释放。
  1. 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的异步和非阻塞原理相关推荐

  1. tornado异步请求非阻塞

    前言也许有同学很迷惑:tornado不是标榜异步非阻塞解决10K问题的嘛?但是我却发现不是torando不好,而是你用错了 比如最近发现一个事情:某网 前言 也许有同学很迷惑:tornado不是标榜异 ...

  2. Python web框架 Tornado(二)异步非阻塞使用以及原理

    原文: http://www.liangxiansen.cn/2018/04/11/tornado/ 作者: 梁先森 稍有改动 Tornado默认是单进程单线程.实时的web特性通常需要为每个用户一个 ...

  3. java处理异步非阻塞请求_Spring WebFlux 的异步非阻塞处理

    前言 随着 Web Servlet 技术栈的不断发展实现了异步处理与非阻塞 IO,但是其异步是不彻底的,因为受制于 Servlet 规范本身,比如其规范是同步的(Filter,Servlet)或阻塞( ...

  4. Spring WebFlux 的异步非阻塞处理

    虽然 Web Servlet 技术栈的不断发展实现了异步处理与非阻塞 IO,但是其异步是不彻底的,因为受制于 Servlet 规范本身,比如其规范是同步的(Filter,Servlet)或阻塞(get ...

  5. java epoll select_Java 非阻塞 IO 和异步 IO

    点击上方 Java后端,选择 设为星标 优质文章,及时送达 作者 | HongJie 链接 | javadoop.com/post/nio-and-aio 本文将介绍非阻塞 IO 和异步 IO,也就是 ...

  6. 非阻塞IO与异步IO

    一.非阻塞IO的轮询读写 ---如果当前进程有多个输入终端和多个输出终端呢?while((n=read(STDIN_FILENO,buf,buf_size))>0){ if(write(STDO ...

  7. 基于MFC的socket编程(异步非阻塞通信)

    对于许多初学者来说,网络通信程序的开发,普遍的一个现象就是觉得难以入手.许多概念,诸如:同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)等,初学者往往迷惑不清,只知其 ...

  8. Java 非阻塞 IO 和异步 IO

    转载自 Java 非阻塞 IO 和异步 IO 上一篇文章介绍了 Java NIO 中 Buffer.Channel 和 Selector 的基本操作,主要是一些接口操作,比较简单. 本文将介绍非阻塞 ...

  9. 聊聊对不同I/O模型的理解 (阻塞/非阻塞IO,同步/异步IO)

    一.关于I/O模型的问题 最近通过对ucore操作系统的学习,让我打开了操作系统内核这一黑盒子,与之前所学知识结合起来,解答了长久以来困扰我的关于I/O的一些问题. 1. 为什么redis能以单工作线 ...

最新文章

  1. Java源码详解二:HashMap源码分析--openjdk java 11源码
  2. jquery字体颜色_基于jquery实现的web版excel
  3. h.264 scanning process for transform coefficients
  4. Netty4服务端和客户端实现
  5. python装饰器应用论文_python 装饰器应用
  6. 发外链网站服务器瘫痪,哪些操作可以导致网站接入瘫痪 - 搜外SEO问答
  7. Android创建项目java报错,创建Android工程时报错:Errors running builder 'Android resource manager' on project '项目...
  8. 史上最全android分辨率
  9. learn go return fuction
  10. ACM第四站————最小生成树(普里姆算法)
  11. 虾米带你轻松搞定Vuejs 系列
  12. 【天下有春】剑气纵横三万里,一剑光寒十九洲
  13. 前端优质网络内容(引用)
  14. DIV布局`电影在线 网站设计——漫威电影(2页) HTML+CSS+JavaScript 学生DW网页设计作业成品
  15. C++学习笔记之数字输入及错误处理
  16. 空洞卷积原理详解及其pytorch代码实现
  17. (CVPR-2020)动态卷积:注意力卷积核
  18. Oracle connect by与level的使用
  19. 计算机专业大学四年的总结
  20. 前端物联网的起点 node-red 项目的开启

热门文章

  1. vue2实现传送门效果
  2. c程序设计与算法语言,C语言:程序设计与算法
  3. VisionPro基础入门
  4. Linux磁盘空间爆满怎么办?定时文件清理脚本配置实现
  5. 【心慈喜讯】“心”启航青少年心理健康支持项目成功入选广州市海珠区“慈泉杯”社会组织公益创投活动
  6. 昆明发生两起公汽爆炸案2死10伤
  7. 网易楚留香获取服务器信息,楚留香手游生活采集物有哪些 获取攻略
  8. 多团队协同开发的18条实践
  9. 第八十七篇 朴素贝叶斯
  10. 二叉树中已知前序和中序求其后序(图解加技巧让你轻松掌握)