Jetty Continuation源码学习

抽丝剥茧聊协程之深入理解Continuation原理 1. 前言 这是新年以来的第一篇更文,在此给大家拜个晚年,祝大家在新的一年所想的都能如愿,同时感谢大家一直以来的支持和帮助。这篇文章其实在春节前就已经构思完了,本想着在留京过年期间写完,由于计划变更,回老家过年去了,春节期间大部分时间在走亲戚,文章也就搁置下来了。 闲话少叙,本文我将尝试给大家讲明白,Kotlin协程如何实现用同步的方式实现异步调用。相信不少同学都能说出以下几种概念中的一个或者多个。 Kotlin suspend关键字 Kotlin内部的Continuation机制 Continuatio 阅读详情

Jetty的NIO可以有效地减少请求的线程数,但是对于servlet而言,依然是每个servlet需要一个线程,Continuation的出现有效地解决了servlet中耗时操作占用请求线程的境况。

Continuation用于处理异步请求,可以在请求处理的上下文交给应用线程去处理并挂起当前请求,这样减少了请求线程的数量,最后当应用线程处理完成后恢复该请求。比如使用该功能可以解决ajax长轮询服务端的境况,异步长连接的功能可见一斑。

Jetty8已经将Continuation集成到了整个框架中,虽然目前并没有很大的应用场景,但是了解该功能亦能无障碍地阅读Jetty的源码。

Continunation结构

1、Continunation的类图

究其名字就是异步长连接的含义,首先了解下其体系结构


蓝色的留作拓展;红色的是恢复请求的基础;黄色的持有Continunation,拥有每个阶段的状态,因此可以有效地控制请求的流转。

2、Continunation的状态

01private staticfinal int __IDLE=0;         // Idle request
02    privatestatic final int __DISPATCHED=1;  // Request dispatched to filter/servlet
03    privatestatic final int __ASYNCSTARTED=2;// Suspend called, but not yet returned to container
04    privatestatic final int __REDISPATCHING=3;// resumed while dispatched
05    privatestatic final int __ASYNCWAIT=4;   // Suspended and parked
06    privatestatic final int __REDISPATCH=5;  // Has been scheduled
07    privatestatic final int __REDISPATCHED=6;// Request redispatched to filter/servlet
08    privatestatic final int __COMPLETING=7;  // complete while dispatched
09    privatestatic final int __UNCOMPLETED=8; // Request is completable
10    privatestatic final int __COMPLETED=9;   // Request is complete

图中不同颜色对应这请求不同的流程,理解该图对于本节的总结至关重要。

1)蓝色的表示正常请求流程

2)红色的表示请求被挂起,并交出线程

3)橙色的表示请求先是被挂起,交出线程前,又被resume恢复了,因此会重复被server去handle。

4)黑色的表示被挂起的请求在调用resume或者超时的情况下被重新恢复。

5)绿色有两层涵义:线程挂起后交出线程前和交出线程之后。可以看到,无论哪种情况走的流程都是一样的。但是区别于resume,complete正如其含义:“完成,结束”,请求是不会再次被递交给server去执行的,因此只适用于交出线程前需要提前结束的时候调用(交出线程之后就算超时了被再次调用也不会被server去执行,因此没有意义)

6)为了简要,图中状态图并不全,但是对于理解Continunation已经足够了。

Spring 5:响应式架构与Kotlin原生支持的工程实践分水岭 响应式编程已成为现代Java企业级开发的核心范式,其本质是通过背压控制、非阻塞I/O和事件驱动模型提升系统吞吐与弹性。Spring 5作为首个深度整合Reactor与WebFlux的主版本,不仅确立了响应式内核的技术标准,更将Kotlin空安全、协程挂起等编译期契约纳入框架底层设计。它推动Java Web从Servlet容器绑定走向协议无关架构,支撑HTTP/2、WebSocket乃至gRPC等新型通信场景。在微服务、流式数据处理及高并发API网关等工程实践中,Spring 5的模块化拆分(如spring- 阅读详情

相关推荐

main方法启动jetty

将此类放入项目中,稍作修改,便可启动jetty部署。

Jetty Continuation源码分析

1.概述 jetty的continuation是用于异步处理请求,简单的讲,请求模型不再是一请求一线程,而是在请求的过程中,可以挂起当前请求,用该容器线程处理别的请求。减小请求线程数,从而减少内存占用和上下文切换。还可以使得应用对于请求更可控,比如针对不同优先级请求分别排队等。 servlet3中也有该异步请求的支持:http://docs.oracle.com/javaee/6/api/ja

kobejayandy的专栏 2850

openEuler 22.03 安装 openGauss 5.0.2 部署手册

openEuler 22.03 安装 openGauss 5.0.2 部署手册

全国服务器高效代维 1423

Jetty Continuation基本原理及实现

背景在io密集型的web 应用,如何能更好地提升后台性能,jetty continuation是一个选择现在特别流行的说法就是事件驱动,看看Node.js以及Redis, jetty continuation也不例外一个例子 [java] view plaincopypackage org.kaka.web;    import java.io.IOException;  import java.

至尊宝猴哥 415

Aras Innovator系统配置-01对象类(一)

对象类配置-对象类属性说明

企业信息化(PLM,ERP.MES) 2032

MOSFET导通电阻Rdson全解析:物理组成、公式推导与工程选型要点

在功率电子设计中,MOSFET作为核心开关器件,其导通电阻Rdson直接决定导通损耗与系统效率。从半导体物理角度看,Rdson并非单一固定值,而是由源极电阻、沟道电阻、累积层电阻、JFET区电阻、漂移区电阻及衬底电阻等多个分量串联而成,并随栅极驱动电压、结温以及击穿电压等级发生显著变化。理解Rdson的物理来源与数学表达,有助于工程师在低压大电流与高压小电流等不同场景中合理选型、优化驱动电压并准确估算热损耗。文章从沟道电阻公式出发,深入剖析耐压与导通电阻的物理矛盾、温度系数的影响规律,并给出数据手册参数的正

weixin_29163857的博客 195

Jetty Continuation机制

Continuation机制 Continuation机制是Jetty用于更好的支持异步Servlet的机制。 首先简要介绍一下技术应用的背景。异步请求是指当客户端发送一个请求到服务器的时候,客户端不必一直等待服务器的响应,例如Web 2.0中的Ajax(Asynchronous JavaScript and XML)技术、JDBC连接池等,当服务器端响应返回时,客户端利用一个 Javasc

kobejayandy的专栏 3544

三端口DC-DC变换器设计与光伏储能协同控制

三端口DC-DC变换器是面向分布式能源系统的关键功率变换拓扑,通过在光伏输入、储能电池与直流负载三个端口间实现动态能量分配,解决多源异步供电下的电压稳定与功率平衡问题。其核心原理基于双Boost半桥架构与双闭环协同控制,融合MPPT最大功率点跟踪与电池智能充放电管理,在保证30V高精度稳压(±0.5V)的同时,支持光伏主导供电与电池支撑供电的自动模式切换。该技术显著提升光储系统能量利用率与供电连续性,广泛应用于微电网、便携式交直流电源及离网型光储一体机等场景,是构建柔性直流配电与智能能源管理的基础硬件单元。

weixin_36431814的博客 141

Jetty源码学习7-Continuation

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33766168的博客 183

Windows 64 位系统下安装配置 DOSBox 及 debug.exe

该篇博客同样作为类似问题 “如何在 Windows 64 位系统下进入 debug” 的答案。 很多同学初看王爽的《汇编语言》,或者因为其它原因需要进入 debug 调试模式下学习汇编语言的时候,会发现进入不了,出现类似以下的错误提示。 这是因为他们使用的是 64 位的 Windows 系统(Win 7,Win 8 以及 Win 10 等),而 64 位 Windows 系统不再支持在命令提示符窗口下进入 debug 调试模式。那么对于使用 64 位 Windows 系统的用户来说,该怎样才能够顺利进入 d

加号减减号的博客 5万+

基于STM32、HAL库的TLV320AIC3204IRHBR音频接口芯片驱动程序设计

* 开启所有数字部分 */#define TLV320AIC3204_REG_LEFT_HEADPHONE_OUT_VOLUME 0x0C /* 左声道耳机输出音量 */#define TLV320AIC3204_REG_DIGITAL_AUDIO_PATH_CONTROL 0x05 /* 数字音频路径控制 */#define TLV320AIC3204_REG_ANALOG_HP_FILTER_CONTROL 0x34 /* 模拟耳机滤波器控制 *//* 最大音量 */

corlin6688的博客 521

Jetty源码-Continuation

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33810006的博客 224

31.XAPP1052乱序分析及处理

目录 1.XAPP1052乱序分析 2.XAPP1052乱序处理 2.1乱序处理方法选择 2.2 XAPP1052乱序处理代码详解 3.XAPP1052乱序处理后的波形分析 3.1发送引擎 3.2接收引擎 4.XAPP1052乱序处理后的带宽测试 5.下期内容 1.XAPP1052乱序分析 首先先给大家讲解下什么是PCIe的乱序。在PCIe系统中,乱序就是主机发送的TLP序列ID为1、2、3、4到从机,从机接收到的可能不是1、2、3、4。主机和从机如果都不解决乱序的问题,就会导致从机接

一个早起的程序员 1707

【练习代码】试用百度BAE和练手jetty continuation的副成品 —— 一个简陋的WEB版LBS聊天应用...

最近写了个测试小应用,是试用百度BAE和练手jetty continuation的副成品,一个简陋的WEB版LBS聊天应用聊天应用。     简介 ---- * 首先需要说明,我最初的想法以失败告终。   * 原本的目标是在BAE上面做一个WEB版的LBS聊天应用,还美其名曰“一圈人”(后面会介绍一圈人 的由来)。目前半成品状态,本地能跑通。   * 几周前,我偶然发现BA...

auzll 223

手把手带你完成基于UNet的医学图像分割系统设计与实现,UNet网络架构讲解,UNet复现,使用vibe coding工具,开发一个完整系统,包含完整源码

哈喽,大家好,这里是落花不写码,本次教程讲一下 U-Net 分割篇,U-Net 它是一篇 2015 年发表的论文,那为什么到现在还需要讲呢?因为后续讲到 GAN、扩散模型时候是离不开 U-Net 架构的,所以今天先带大家使用 U-Net 模型完成一些图像分割。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 870

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Jetty 源码包

jetty   Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。 易用性 易用性是 Jetty 设计的...

qq775476657的专栏 148

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

I-jetty的web应用

from:http://www.apkbus.com/android-61775-1-1.html 一、I-jetty的web应用程序编程语言的确定 要确定其发布页面的语言就要找到他发布的服务器中页面所在的位置,之前说服务器需要存储卡才可以发布服务,所以目标锁定在Android文件系统的sd卡。 打开eclipse,然后启动虚拟机,找到虚拟机的文件管理器,如图 找到mn

dylancao的专栏 2784

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Jetty源码学习9-WebSocket

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34126215的博客 310

Comet技术在项目中的使用

Comet是一种服务器端推的技术,所谓服务器端推也就是当有事件要通知给某个用户的时候,是由服务器端直接发送到用户的浏览器。服务器端Push目前一般有两种方式,HTTP streaming和Long polling。详细的介绍可以看这里 http://en.wikipedia.org/wiki/Push_technology 有一个Comet的框架叫做Cometd,使用的方式为Long polli...

没有人能够随随便便成功 519

Ubuntu CUDA环境配置:驱动、Toolkit、cuDNN与框架版本

GPU 深度学习环境配置本质上是驱动、CUDA Runtime、CUDA Toolkit、cuDNN 与上层框架之间的版本与路径协同。驱动向下兼容并决定可运行的 CUDA 上限,Toolkit 提供 nvcc、头文件和数学库,cuDNN 面向卷积、Attention 等算子做优化,PyTorch/TensorFlow 则可通过自带 runtime 调用底层能力。理清这层关系,能减少 nvidia-smi 版本误读、cuDNN 路径缺失、nvcc 找不到以及 gzip: stdin: invalid comp

weixin_34021089的博客 448

初识Continuation

本文来自网易云社区作者:陆艺上学时看了SICP之后就对scheme这个看上去比较古怪的语言产生了兴趣. 虽然书里并没有涉及scheme太多语法以及语言上特性的一些东西, 作为一个喜欢折腾的人, 手贱翻了翻Google, 了解到有continuation这样一个吊吊的东西, 于是借着有限的脑力学习了下.基本概念continuation的中文一般都叫做"续延"(还蛮好听的), 不过解释起来比较麻烦, ...

网易数帆社区博客 788
上一篇: Java协程框架----Kilim实现机制解析
下一篇: Jetty Continuation源码分析
kobejayandy
博客等级 码龄18年 2853粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值