服务端线程模型-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(); // 删除选择键
            }
        }    

原文地址:https://www.cnblogs.com/fudashi233/p/10747651.html

时间: 2024-10-08 09:07:55

服务端线程模型-NIO服务模型的相关文章

聊天室-服务端线程处理客户端信息

public class ServerThread extends Thread { //需要处理的socket private Socket socket; //该线程对应的用户信息 private User user; //新建读取信息缓存区 public BufferedReader bufferedReader; //新建写入字符流 public PrintWriter printWriter; //通过构造方法,初始化socket public ServerThread(Socket

高吞吐高并发Java NIO服务的架构(NIO架构及应用之一)

高吞吐高并发Java NIO服务的架构(NIO架构及应用之一) http://maoyidao.iteye.com/blog/1149015 Java NIO成功的应用在了各种分布式.即时通信和中间件Java系统中.证明了基于NIO构建的通信基础,是一种高效,且扩展性很强的通信架构. 基于Reactor模式的高可扩展性架构这个架构的基本思路在“基于高可用性NIO服务器架构”(http://today.java.net/pub/a/today/2007/02/13/architecture-of-

Java IO模型&amp;NIO

Java IO模型&NIO Java IO模型NIO 楔子 概述 网络服务 经典的服务设计 经典的SocketServer循环阻塞 可伸缩目标 分而治之 事件驱动设计 背景知识AWT 事件 Reactor 模式 Reactor基础模式 Java NIO 支持 Channels Buffers Selectors SelectionKeys Reactor 模式实践 第一步初始化 第二步循环分发 第三步接收者 第四步 Handler设置 第五步请求处理 还有一种状态Handler 多线程版本Rea

Android系统Surface机制的SurfaceFlinger服务的线程模型分析

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8062945 在前面两篇文章中,我们分析了SurfaceFlinger服务的启动过程以及SurfaceFlinger服务初始化硬件帧缓冲区的过程.从这两个过程可以知道,SurfaceFlinger服务在启动的过程中,一共涉及到了三种类型的线程,它们分别是Binder线程.UI渲染线程和控制台事件监控线程.在本文中,我们就将详细分SurfaceFl

ArcGIS API for Silverlight 调用GP服务准备---GP模型建立、发布、测试

原文:ArcGIS API for Silverlight 调用GP服务准备---GP模型建立.发布.测试 第一篇.GP降雨量等值线建模.发布及测试 在水利.气象等行业中,要在WebGIS中实现空间分析功能,如绘制等值线.等高线.等直面.缓冲区等都是经常遇到,经过一段时间的学习和研究,查阅ESRI文档,请教他人,终于可以说是初步实现了等值线功能,这里记录下来详细的操作步骤和图片说明,一方面是对此次努力的总结,另一方面希望也能给后来用到这方面的其他同志们,起个抛砖引玉的作用. 下一篇是关于Silv

八、网络服务I/O模型

8.1.四种的I/O模型 在操作系统中,进程无法直接操作I/O设备,其必须通过系统调用请求kernel来协助完成I/O动作,而内核会为每个I/O设备维护一个buffer.进程与I/O之间的通信模型如图所示. 对于输入而言,等待(wait)数据输入至buffer需要时间,而从buffer复制(copy)数据至进程也需要时间.根据调用者与被调用者的不同就有四种I/0模型. 调用者处理措施:  阻塞:进程发起 I/O 调用, 未完成之前,当前进程会被挂起: 非阻塞:进程发起 I/O 调用,被调用函数完

《自适应路由服务合成:模型及优化》

摘要: 面对频繁产生和变化的通信需求,可以考虑路由功能重用,通过选择合适的路由功能,在通信路径上为应用合成定制化的路由服务,满足用户差异化的需求.基于网络功能虚拟化和SDN提出了一种自适应路由服务合成机制. 机器学习起的作用:运用多层前馈神经网构建路由服务离线模式和在线模式两阶段学习模型,对路由功能选择及组合进行持续学习和优化,实现路由服务的定制化目标. 关键词:路由服务:网络功能虚拟化:软件定义网络:软件产品线:机器学习:多层前馈神经网络 <自适应路由服务合成:模型及优化> 需求:虽然网络环

java服务端bio和nio

BIO 伴随着Java的发布,带来的是Socket套接字API.这套API实现是的同步阻塞IO模型.下面首先来看个示例,如何使用这套API完成一个echo服务端程序. 服务端: public class MultiThreadedEchoServer { public static void main(String[] args) { ServerSocket echoServer = null; Executor executor = Executors.newFixedThreadPool(

Linux下多进程服务端客户端模型一(单进程与多进程模型)

本文将会简单介绍Linux下如何利用C库函数与系统调用编写一个完整的.初级可用的C-S模型. 一.基本模型: 1.1   首先服务器调用socket()函数建立一个套接字,然后bind()端口,开始listen()监听,此时,套接字变成了被动的套接字,用于侦听客户端的请求.然后accept(),开始阻塞监听客户端的请求. 1.2   客户端以服务端的参数为参数,用socket()建立套接字,然后connect()连接服务端. 1.3  服务端收到连接请求,accept()返回一个标识符,继续执行