nio的成本和收益以及客户端是否需要使用nio

news/2024/11/28 10:42:36/

nio的成本和收益以及客户端是否需要使用nio

nio额外成本: 需要额外安排一个网络线程池

是否需要使用nio? 分节省线程和节省连接两个角度讨论下:

一. 是否节省线程:
服务端: 肯定是要的, 收益: 通过多路复用, 增加安排少量的网络线程即可监听成千上万的端口(客户端连接事件), 而不用阻塞服务端的大量业务线程
客户端: 看情况:
1.场景一, 没节省. 安排了网络线程池, 却没有受益, 或者是负受益, 如果本身就是同步场景, 业务线程必须要等待http结果才能处理下一步, 并且不能放在网络线程回调中处理(网络线程不能处理太慢的业务, 就像netty一样), 这种情况还是挺多的.
2.场景二, 节省了, 业务线程直接不鸟这个结果了, 不满足场景一的, 比如, 调用方业务不用同步等结果, 可以在网络线程的响应回调中执行 (大不了多开点网络线程), 或者就只要调一个就行了, 对于响应的处理并不复杂耗时

二. 是否节省连接
这个只讨论客户端就行了, 因为连接客户端发起的.

节省连接实际就是看能否并发请求, 并发请求的前提是client有办法把请求和响应对应起来, 也就是要看使用的协议. 比如dubbo.
http1.1 : 是不行的
http2 :
a. 天生多请求复用一个tcp连接 (省了连接池), 并发请求, 如果通信双方实现了http2.
b. 建议使用HttpAsyncClient (一般来说, 都会双方会智能协商http使用版本, 优先使用高版本. 协商成了就赚了, 降级成低版本也就比bio多损耗一点点, 长期来看应该是收益大的)
c. 上文提到, 并发请求的前提是client有办法把请求和响应对应起来这是要有线程去干这个活的, 很显然, 这个活得网络线程干. 所以选择http2还是得用nio, 就好比duboo的客户端使用了netty nio(服务端也是netty nio), grpc客户端照样使用netty nio (服务端是 web 比如tomcat nio). lettuce有办法对应请求和响应, 所以客户端也是省连接使用netty nio (服务端是redis. 从客户端请求的角度来看, 服务端可以看成是单线程的, 因为redis协议和http1.1一样, 响应报文本身是没能力去对应请求的), 就算使用单个连接也很强

ps:
HTTP2:当使用 HTTP2 进行并发请求时,每个请求都会对应一个唯一的标识符,称为 Stream ID。请求和响应之间的对应关系是通过 Stream ID 来建立的。请求和响应的 Stream ID 是由客户端和服务器共同协商的,通过 HTTP2 协议中的流控制机制来实现。具体来说,客户端每次发出请求时都会带上一个唯一的 Stream ID,服务器在对应的响应报文中携带相同的 Stream ID,以此来建立请求和响应之间的对应关系。需要注意的是,使用 HTTP2 时不需要手动添加 Connection 和 Keep-Alive 字段,因为 HTTP2 中的多路复用技术会将多个请求和响应全部放在同一个 TCP 连接中,节省了连接的建立和关闭开销。HTTP1.1是请求-响应模型(根源也是没法对应请求和响应), 在一个连接上, 上一个请求的响应返回以前, 这个连接是不可以被使用的, 如果响应时间很长, 那就等着(不愿意耗着就关闭这个连接), 或者开连接池, 用别的连接. 别无他法


http://www.ppmy.cn/news/63979.html

相关文章

JavaScript通过js的方式来判断一个数奇偶性的代码

以下为通过js的方式来判断一个数奇偶性的程序代码和运行截图 目录 前言 一、通过js的方式来判断一个数奇偶性(html部分) 1.1 运行流程及思想 1.2 代码段 二、通过js的方式来判断一个数奇偶性(js部分) 2.1 运行流程及思想 2…

智能美妆镜兴起,如何升级更精细、智能的化妆体验!

经常化妆的小姐姐,会发现化妆除了要有好皮肤、一堆化妆品之外,化妆镜的作用也尤其重要!爱拍照的小姐姐们都知道,自拍的效果好不好,和背景、灯光有着很大的关系,其中灯光的冷调或者暖调,也是影响…

机器人工程学习和研究的结构性失衡

结论:无解,谁是那屈指可数的幸运者/(ㄒoㄒ)/~~ 供给:培养的机器人工程专业人才 需求:市场企业主体招聘的相关人才 不匹配,错配,导致供给无效。 机器人工程学习和研究的结构性失衡可能是由多种原因导致的…

Android 音频开发——Radio服务(二)

收音机(Radio)作为 Android 中比较常见的的模块,它的服务(BroadcastRadioService)跟蓝牙、WiFi 服务一样都是在 SystemServer 中启动的。本章节我们主要分析一下 BroadcastRadioService 的相关源码。 一、服务启动流程 1、SystemServer 源码路径:/frameworks/base/ser…

实施CRM目标有哪几步?如何制定CRM目标?

在当今竞争激烈的商业环境中,与客户建立持久的关系是企业重要的工作。CRM客户管理系统能有效帮助企业管理优化流程、管理客户,提高销售成功率,推动收入增长。那么您了解如何实施CRM吗?下面说说实施CRM目标是什么,如何设…

C#学习笔记--foreach循环是怎么遍历容器的?实战带你弄懂foreach原理

目录 前言foreach原理实现自己的容器例子一:数组容器例子二:Student类 前言 上篇文章我们了解了IEnumerable和IEnumeratorC#学习笔记–由浅至深理解IEnumerable和IEnumerator 这篇文章我们来研究foreach循环 foreach原理 foreach循环实际上是通过调用…

制造业软件体系结构与互联网的差异

本人自毕业已经13年,虽然热爱计算机,但是由于种种原因,一直在东莞的工厂混迹,感受着互联网的大潮,也不免有几分失落,伴随这去年、今年大厂裁人,许多被逼无路的程序员开始跳槽制造业,…

程序设计入门——C语言 2023年5月9日

程序设计入门——C语言 一、基础理解1、什么是计算机?如何用计算机做事情?什么是应用软件?编程语言干啥的?计算机与人脑?学习编程能干啥?2、计算机-程序-算法3、解释语言vs编译语言 课程来源:链…