之前研究了下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. c语言计算M=11 22 33,四川计算机C语言考试笔试真题33次..doc
  2. 如何通过中序和层序序列建立二叉树
  3. 多协议注入工具t50
  4. Ubuntu12.04安装jdk1.6.0
  5. android编译全过程
  6. 【机器学习基础】数学推导+纯Python实现机器学习算法27:LDA线性判别分析
  7. Qt Creator在设计模式下编辑3D资产
  8. jQuery前端教程-张晨光-专题视频课程
  9. json_encode ajaxReturn getJSON
  10. windowns2019辅域添加
  11. linux卸载alien,Ubuntu/Debian下的安装包装换工具—alien
  12. Codeforces Round #372 (Div. 1) B. Complete The Graph
  13. java对象说明 PO,BO,VO,DTO,POJO,DAO,Entity
  14. python smtplib模块_python使用smtplib模块发送邮件
  15. shell脚本下的教你如果运用for,while,unti循环,以及区别l
  16. k8s(十三)、企业级docker仓库Harbor在kubernetes上搭建使用
  17. “三门问题”的理解和Python验证
  18. 苹果手机连接电脑服务器传文件,还在羡慕苹果电脑隔空操作?windows的这个骚操作,3秒即可传文件...
  19. 【Web Development - AnnihilateSword】03 - Intermediate HTML
  20. Verilog基础知识总结02

热门文章

  1. centos7使用蓝牙_centos7 下 通过终端 连接 蓝牙设备
  2. 写一个简单的准星辅助小工具
  3. Rodrigues' Rotation Matrix(罗德里格旋转矩阵)
  4. 错误: 日期/时间值超出范围
  5. 有测试智商的软件不,测试智商的软件有哪些
  6. 一些中文字体的英文名
  7. Chromium网页Render Layer Tree创建过程分析
  8. 赚多多V10自动任务网抢单源码+会员自营版+教程
  9. 必看:C语言高效学习方法(附经典试题详解)
  10. 可以用于云原生中Skywalking框架原理你真的懂吗