服务端线程模型-NIO服务模型
上接《服务端线程模型-线程池服务模型》(https://www.cnblogs.com/fudashi233/p/10549221.html)。
这篇分享从最初的单线程服务模型一直演进到线程池服务模型,充分发挥出了现在多核CPU机器的优势,但是当面对万级别的qps时,仍然可能因为线程池打满而拒绝掉大量请求。
比如可能有不少请求需要大量IO资源,导致IO阻塞的耗时较长,这就会导致其一直占用宝贵的线程池资源,导致后续的请求的响应时间长。
这时就需要使用NIO服务模型了,基于Selector的事件监听机制,他会轮询已经建立的Socket,将准备好了的请求交给CPU处理,充分利用线程资源。

基本的代码模型如下所示
while (selector.select() > 0) { // 轮询/监听底层Socket
Iterator<SelectionKey> iterator = selector.selectedKeys().iterator();
while (iterator.hasNext()) {
SelectionKey selectionKey = iterator.next(); // 获取准备就绪的事件
if (selectionKey.isAcceptable()) { // 发生客户端连接事件
} else if (selectionKey.isReadable()) { // 发生读事件
}
} else if (selectionKey.isWritable()) { // 发生写事件
}
selectionKey.cancel();
selectionKey.channel().close();
iterator.remove(); // 删除选择键
}
}
服务端线程模型-NIO服务模型的更多相关文章
- 没想到吧!关于Dubbo的『消费端线程池模型』官网也写错了。
这是why的第 63 篇原创文章 荒腔走板 大家好,我是 why,欢迎来到我连续周更优质原创文章的第 63 篇.老规矩,先荒腔走板聊聊其他的. 上面这张图片是我前几天整理相册的时候看到的.拍摄于 20 ...
- 高吞吐高并发Java NIO服务的架构(NIO架构及应用之一)
高吞吐高并发Java NIO服务的架构(NIO架构及应用之一) http://maoyidao.iteye.com/blog/1149015 Java NIO成功的应用在了各种分布式.即时通信和中 ...
- Android系统Surface机制的SurfaceFlinger服务的线程模型分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8062945 在前面两篇文章中,我们分析了Sur ...
- ArcGIS API for Silverlight 调用GP服务准备---GP模型建立、发布、测试
原文:ArcGIS API for Silverlight 调用GP服务准备---GP模型建立.发布.测试 第一篇.GP降雨量等值线建模.发布及测试 在水利.气象等行业中,要在WebGIS中实现空间分 ...
- Chromium的无锁线程模型C++代码示例
引言 作者:程序员bingo,主要关注客户端架构设计.性能优化.崩溃处理,有多年的Chromium浏览器开发经验. 多线程一直是软件开发中最容易出问题的环节,很多的崩溃.卡死问题都与多线程有关.在常用 ...
- 【AGC】增长服务1-远程配置示例
[AGC]增长服务1-远程配置示例 前言:上一次笔者给大家带来了AGC领域的性能管理服务的学习.这次我们再继续深化学习AGC的相关知识.在文章开始之前,再给读者简单介绍一下AGC,以免第一次来的读 ...
- 从连接器组件看Tomcat的线程模型——NIO模式
Tomcat8之后,针对Http协议默认使用org.apache.coyote.http11.Http11NioProtocol,也就是NIO模式.通过之前的博客分析,我们知道Connector组件在 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (39) ------ 第七章 使用对象服务之配置模型和使用单复数服务
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-3 配置模型 问题 你想了解配置模型中的各种选项. 解决方案 当你添加一个AD ...
- [编织消息框架][网络IO模型]NIO(select and poll)
上面测试论证系统内核在read data时会阻塞,如果我们在把第一个阶段解决掉那么性能就会提高 NIO 编程 JDK 1.4中的java.nio.*包中引入新的Java I/O库,其目的是提高速度.实 ...
随机推荐
- Confluence 6 在你的 LDAP 目录中优化用户和用户组数量
连接 LDAP 服务器能为你的用户管理提供灵活高效的解决方案.为了达到优化的性能,后台同步程序将会从 LDAP 上查找和下载数据同步到你本地的 Confluence 服务器数据库上同时还会定时的更新数 ...
- 使用 Kafka 和 Spark Streaming 构建实时数据处理系统
使用 Kafka 和 Spark Streaming 构建实时数据处理系统 来源:https://www.ibm.com/developerworks,这篇文章转载自微信里文章,正好解决了我项目中的技 ...
- IO 多路复用
IO 多路复用 多路复用也是要用单线程来处理客户端并发,与其他模型相比多出了select这个模块. 程序不再直接问操作系统要数据,而是先发起一个select调用,select会阻塞直到其中某个sock ...
- Loadrunner常用目录、组成部分及负载测试流程
常用目录 bin:存放一些可执行程序 classes:可能用到的jar包 My Template:存放一些自己创建的模板 include:头文件(可以编写自定义函数,保存成.h的头文件形式并放在这个目 ...
- python unittest装载、执行、造成报告
#执行用例 caselist = config.caselist for i in range(0,len(caselist)): reportname = caselist[i][2:] now = ...
- 80端口被占用 导致apach无法启动问题
1.查找是哪个程序占用了80端口 netstat -ano 列出所有进程 观察 “本地地址” 列 找到对应的PID 我这里是4 简单的办法,打开任务管理器,查看PID是4的 是哪个进程. 发现是Sys ...
- 步步为营-104-SQL语句(截取字符串)
按照指定字符截取字符串,截取出300 业务需求:想比对图片中框线部分是否一致 第一步 从最后一个/截取到末尾 select top 1 reverse(substring(reverse(Proces ...
- 集腋成裘-02-css基础-01
CSS 层叠样式表(Cascading Style Sheets)(级联样式表) 1 选择器 1.1 写法 选择器是一个选择标签的过程. 选择器{属性:值;...} 1.2 基础选择器 标签选择器 类 ...
- tomcat安装出现的闪退问题
如果闪退 在该文件中结尾添加pause 可以检测到路径问题是不是有问题
- python requests的content和text方法的区别
requests对象的get和post方法都会返回一个Response对象,这个对象里面存的是服务器返回的所有信息,包括响应头,响应状态码等.其中返回的网页部分会存在.content和.text两个对 ...