论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
读Java性能权威指南(第2版)笔记30_Java服务器 ...
读Java性能权威指南(第2版)笔记30_Java服务器
种地
论坛元老
|
2023-4-4 14:19:05
|
显示全部楼层
|
阅读模式
楼主
主题
1091
|
帖子
1091
|
积分
3273
1. 响应式编程
1.1. 使用基于事件的范式处理异步数据流
1.2. 和异步编程提供了相同的性能优势
1.3. 能够扩展程序(特别是扩展I/O)以处理很多连接和数据源
2. 非阻塞I/O
2.1. 有效扩展服务器的基础
2.2. 允许服务器用相对较少的线程处理相对较多的连接
2.2.1. 传统的服务器利用这一点来处理基本的客户端连接
2.2.2. 新的服务器可以将非阻塞特性扩展到其他应用程序
3. 优化服务器线程池
3.1. 选择器线程
3.1.1. 在I/O可用时通知系统调用的线程
3.2. 选择器通知有客户端I/O待处理之后,另一个包含工作线程的线程池会处理实际的请求和响应
3.3. 要足够多的工作线程来处理服务器所能处理的并发请求数(而非并发连接数)
3.4. 像所有受限于CPU的情况一样,线程的数量没有必要比运行服务器的机器或容器的虚拟CPU数量多,因为永远没有办法运行那么多的线程
3.5. 将长请求推迟到另一个线程池中,这为主线程池提供了更强大的请求处理能力
3.6. 异步REST服务器
3.6.1. 使用异步响应有3个原因
3.6.1.1. 为了在业务逻辑中引入更多的并行性
3.6.1.2. 为了限制活跃线程的数量
3.6.1.3. 为了适当地对服务器限流
3.6.2. 添加了@Suspended注解的AsyncResponse正在等待逻辑完成,一旦完成,它就会继续将响应发回给用户
3.6.3. 在排队等待响应之前,看看异步线程池的状态,如果系统太忙,就拒绝请求
3.6.4. 如果线程数量等于池大小,响应会被立即取消
3.6.4.1. 调用者会立即收到错误提示“HTTP 503服务不可用”,表示此时不能处理该请求
3.6.5. 立即返回该错误能减少过载服务器的负载,这最终会使整体性能大幅提高
3.6.5.1. 这是REST处理过载服务器的首选方式
4. 异步出站调用
4.1. HTTP客户端
4.1.1. 处理发向服务器的HTTP请求类
4.1.2. 可以通过在多个线程之间分配工作来提高性能,从而增加并发量
4.1.3. java.net.HttpURLConnection类
4.1.3.1. Java 8
4.1.4. java.net.HttpsURLConnection
4.1.4.1. Java 8
4.1.5. java.net.http. HttpClient类
4.1.5.1. 也处理HTTPS
4.1.5.2. Java 11
4.1.6. org.apache.http.client.HttpClient
4.1.6.1. Apache软件基金会
4.1.7. org.asynchttpclient.AsyncHttpClient
4.1.7.1. Netty项目
4.1.8. org.eclipse.jetty.client.HttpClient
4.1.8.1. Eclipse基金
4.2. JAX-RS
4.2.1. JAX-RS连接器提供了一个Client对象用于REST调用
4.2.2. HTTP客户端可以正确地池化连接并使用keepalive来保持连接开放
4.3. -Dhttp.maxConnections=N
4.3.1. 改变池的大小
4.3.2. 默认值是5
4.3.3. 适用于HTTPS连接
4.3.4. 不能起到限流的作用
4.4. HttpClient类
4.4.1. JDK 11
4.4.2. 默认的池大小是无限制的
4.4.3. -Djdk.httpclient.connectionPoolSize=N
4.4.3.1. 不能起到限流的作用
4.4.3.2. 请求的连接超过了配置的数量,它们会在需要的时候被创建,在完成任务后被销毁
4.5. 与使用传统I/O构建的客户端相比,使用NIO构建的异步HTTP客户端需要的线程更少
4.6. 但REST服务器仍然需要相当多的线程来处理异步请求
5. 异步数据库调用
5.1. 使用最广泛的是Spring项目的Spring Data R2DBC
5.1.1. 对于关系数据库的非阻塞访问来说,这是最好的选择
5.2. 针对响应式NoSQL数据库的Spring项目可以用于真正的异步访问
6. 格式
6.1. Apache Avro
6.2. Google的Protocol Buffers
6.3. XML
6.4. JSON
7. JSON处理
7.1. 解码(unmarshaling)
7.1.1. 输出的是一个Java对象
7.2. 解析(parsing)
7.2.1. 数据在读取时被处理,这个过程就叫作解析
7.3. 给定一系列JSON字符串,程序必须将这些字符串转换为适合Java处理的数据
7.4. 编码(marshaling)
7.4.1. 从其他数据生成JSON字符串的过程
7.5. 通用技术
7.5.1. 拉解析器(pull parser)
7.5.1.1. 输入的数据与解析器相关联,程序从解析器请求(或拉取)一系列标记(token)
7.5.2. 文档模型(document model)
7.5.2.1. 输入的数据被转换为一个文档风格的对象,应用程序可以在寻找数据片段时遍历这个对象
7.5.3. 对象表示(object representation)
7.5.3.1. 通过使用一组反映数据结构的预定义类,将输入的数据转换成一个或多个Java对象
7.5.3.2. POJO(plain old Java object)
7.6. JSON数据表示形式
7.6.1. 简单JSON对象
7.6.1.1. 通用接口进行操作,如JsonObject和JsonArray
7.6.1.2. 不需要具体表示数据的类
7.6.1.3. 生成简单JSON对象比生成自定义Java类要快得多
7.6.2. JSON对象表示形式
7.6.2.1. 从编程的角度来看,这些Java类更容易使用
7.6.2.2. 使用可以产生POJO的JSON-B(JSON Binding),将JSON数据绑定到一个完整的Java类
7.7. Jackson
7.7.1. Jackson解析器通常是最快的解析器,应该优先选择它,而不是选择默认的实现
7.8. 所有的JSON解析器都是拉解析器
7.8.1. 从流中按需检索数据
7.8.2. 实际的解析器不能被重复使用,它们也不是线程安全的。因此,解析器通常是按需创建的
7.9. 处理JSON有两种方式:创建POJO对象和直接解析
7.9.1. 直接解析提供了过滤的能力和通用的性能提升机会
7.9.2. 当对象很大时,创建JSON对象往往会导致GC问题
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
种地
论坛元老
这个人很懒什么都没写!
楼主热帖
Beta 阶段事后分析
mac下配置Charles,安装证书,连接iOS ...
为什么 SQL 语句使用了索引,但却还是 ...
图的基本术语,邻接矩阵、邻接表表示方 ...
python经典习题(一)
DOS窗口命令和单表简单查询
Archlinux scarlett solo driver insta ...
5.返回值IDCANCEL和CommDlgExtendedErr ...
利用kubernetes中的leader选举机制来完 ...
MySQL实战45讲 10
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
Mysql
Oracle
DevOps与敏捷开发
linux
开源技术
IOS
移动端开发
快速回复
返回顶部
返回列表