AsyncContext异步和多线程区别

AsyncContext不是异步输出时使用的,而是同步输出,但是解放服务器端的线程使用,使用AsyncContext的时候,对于浏览器来说,他们是同步在等待输出的,但是对于服务器端来说,处理此请求的线程并没有卡在那里等待,则是把当前的处理转为线程池处理了,关键就在于线程池,服务器端会起一个线程池去服务那些需要异步处理的请求,而如果自己每次请求去起一个线程处理的话,这就有可能会耗大量的线程。

目前对AsyncContext 的使用并不是最佳实践,实际上应该这样使用:

final AsyncContext asyncContext = request.getAsyncContext();

????????????asyncContext.addListener(new AsyncListener() {

[email protected]

????????????????public void onComplete(AsyncEvent event) throws IOException {

????????????????????//在这里处理正常结束的逻辑

????????????????}

[email protected]

????????????????public void onTimeout(AsyncEvent event) throws IOException {

????????????????????//在这里处理超时的逻辑

????????????????}

[email protected]

????????????????public void onError(AsyncEvent event) throws IOException {

????????????????????//在这里处理出错的逻辑

????????????????}

[email protected]

????????????????public void onStartAsync(AsyncEvent event) throws IOException {

????????????????????//在这里处理开始异步线程的逻辑

????????????????}

????????????});

????????????//设置超时的时间,到了时间以后,会回调onTimeout的方法

????????????asyncContext.setTimeout(10000L);

????????????//在这里启动,传入一个Runnable对象,服务器会把此Runnable对象放在线程池里面执行

????????????asyncContext.start(new Runnable() {

[email protected]

????????????????public void run() {

????????????????????//在这里做耗时的操作,如果做完,则调用complete方法通知回调,异步处理结束了

????????????????????asyncContext.complete();

????????????????}

????????????});

原文地址:http://blog.51cto.com/14070466/2328562

时间: 2024-10-11 10:50:49

AsyncContext异步和多线程区别的相关文章

并发和并行,异步与多线程区别

1.并发和并行的区别 可由上图形象指出两者的区别: 1)定义: 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行. 并行:在操作系统中,一组程序按独立异步的速度执行,无论从微观还是宏观,程序都是一起执行的. 来个比喻:并发和并行的区别就是一个人同时吃三个馒头和三个人同时吃三个馒头: 在单CPU系统中,系统调度在某一时刻只能让一个线程运行,虽然这种调试机制有多种形式(大多数是时间片轮巡为主

C#中异步和多线程的区别

C#中异步和多线程的区别是什么呢?异步和多线程两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性.甚至有些时候我们就认为异步和多线程是等同的概念.但是,异步和多线程还是有一些区别的.而这些区别造成了使用异步和多线程的时机的区别. 异步和多线程的区别之异步操作的本质 所有的程序最终都会由计算机硬件来执行,所以为了更好的理解异步操作的本质,我们有必要了解一下它的硬件基础. 熟悉电脑硬件的朋友肯定对DMA这个词不陌生,硬盘.光驱的技术规格中都有明确DMA的模式指标,其实网卡.声卡.显卡也是有

异步与多线程的区别

当我们在遇到需要长时间执行的任务时候,比如读取一个文件,远程服务调用.这些功能都会阻塞主线程,造成主线程卡死,从而造成一种软件崩溃的假象.这样的情况下,我们都会想到使用异步多线程的技术去解决这个问题. 我在学习NodeJs的之前,一直以为异步和多线程是同一个概念,当我接触到Node的时候,感觉自己遭到了当头棒喝,Node是单线程的,也不支持多线程,但是他的很多操作都是异步的,比如文件的读取.这让我很沮丧,也花了很长时间去理解异步和多线程的概念区别,现在记录下来我现在的想法,希望看到的朋友也能帮组

IOS异步和多线程操作&&在sqlite3中的应用

1,数据库I/O操作(异步) 数据库本身是存储在磁盘上.访问和修改数据库,即对磁盘进行读写,即I/O操作. 磁盘属于计算机硬件,具有DMA能力,不需要CPU干预,可以实现异步操作. I/O操作一般是消耗时间,sqlite使用异步处理I/O操作. 当有多个事务对数据库进行操作,对应,也会有多个I/O操作. 操作系统将I/O操作,合理放入一个I/O队列.一次性将队列内的I/O操作提交给磁盘系统,并行处理多个I/O,提高效率.本人也没有特别深入研究. 2,异步和多线程 异步和多线程,都有能力实现,不阻

程序优化方案(一) 代码优化之异步、多线程、缓存

上部分说了代码的合并,那么接下来就说说如何真正的提升程序的速度.这里不得不提到的几个优化程序速度的技术就是异步,多线程和缓存.首先我们要知道程序为什么会卡,特别是加载的时候很慢,原因在于之前的程序是单线程,中途大量的数据库操作和外部接口的调用都耗用了大量的时间导致方法堵塞,所以界面上表现的就是假死状态. 那么异步加多线程加缓存用对地方刚好可以解决这些问题,那么这三种东西都是在什么情况下使用呢. 一.异步 假如现在我们主程序上有一个Grid,当我们在加载的时候这个Grid需要绑定大量的数据,并且根

异步、多线程解惑

关于多线程和异步相信不少人都有疑问,它们之间到底有什么区别呢? 从知乎上看见一个比喻还是比较好理解的: 现在假设整个城市就只有1个火车,1个售票员,每个乘客咨询售票员后需要思考1分钟再决定买哪趟车的票. 异步 在买票的人咨询后,需要思考1分钟,马上靠边站,但不用重新排队,什么时候想清楚可以立马去跟售票员去买票.在该人站在旁边思考的时候,后面的人赶紧上去接着买.这时候队伍是很快的挪动的,没有阻塞,售票员的最大化的效率. 多线程 火车站开n个窗口(但还是只有一个人售票),外面同时排n个队,售票员回答

信号驱动和异步驱动的区别

5种I/O模型: 1.阻塞I/O 2.非阻塞I/O 3.异步I/O 4.信号驱动I/O 5.I/O复用 信号驱动和异步驱动的区别 信号驱动IO是指:进程预先告知内核,使得 当某个socketfd有events(事件)发生时,内核使用信号通知相关进程. 异步IO(Asynchronous IO)是指:进程执行IO系统调用(read / write)告知内核启动某个IO操作,内核启动IO操作后立即返回到进程.IO操作即内核当中的服务例程. 异步I/O和信号驱动I/O的区别很容易被混淆.前者与后者的区

同步、异步、多线程与事件型综述

转自:http://blog.csdn.net/chszs/article/details/8867174 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs首先要了解什么是阻塞和阻塞式IO.线程在执行中如果遇到磁盘读写或网络通信(统称IO操作),通常要耗费较长的时间,这时操作系统会剥夺此线程的CPU控制权,使其暂停执行,同时将资源让给其他的工作线程,这种线程调度方式称为阻塞.当IO操作完毕时,操作系统将这个线程的阻塞状态解除,恢复其对CPU的控制权,令

Java千百问_01基本概念(014)_同步、异步有什么区别

点击进入_更多_Java千百问 1.同步.异步有什么区别 在进行网络编程时,我们通常会看到同步.异步.阻塞.非阻塞四种调用方式以及他们的组合. 了解阻塞.非阻塞看这里:[阻塞.非阻塞有什么区别][2] [2]: 其中同步方式.异步方式主要是由客户端(client)控制的,具体如下: 同步(Sync) 所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或继续执行后续操作. 根据这个定义,Java中所有方法都是同步调用,应为必须要等到结果后才会继续执行.我们在说同步.异步的时候,一