【Netty的NIO模型与常见的NIO模型对比】

【原始的BIO模型】

ServerSocket serverSocket = new ServerSocket(portNumber);//
Socket clientSocket = serverSocket.accept(); //
BufferedReader in = new BufferedReader( //
new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out =
new PrintWriter(clientSocket.getOutputStream(), true);
String request, response;
while ((request = in.readLine()) != null) { //
if ("Done".equals(request)) { //
break;
}
}
response = processRequest(request); //
out.println(response); //
}

[ 流程分析 ]

1.ServerSocket创建并监听端口的连接请求

2.accept()调用阻塞,直到一个连接建立,返回一个新的Socket用来处理客户端与服务端的及哦啊胡

3.流被创建用于处理socket的属于和输出数据,BufferReader读取从字符输入流的文本,并用PrintWriter打印格式化展示的对象到文本输出流。

4.处理循环readLine()阻塞,读取字符串直到最后的是换行后者输入终止。

5.处理"Done"

6.处理请求参数,返回响应

7.响应返回客户端

[ 缺点分析 ]

每次只能处理一个连接,为了实现多个并行的客户端,需要分配一个新的Thread给每个新的客户端Socket,这种方法来吃力大量的同步长连接,在很多时候,线程是处于休眠状态,等待输入或输出数据,造成大量的资源浪费。

[ 使用场景 ]

如果应用中连接数较少,还是可以接受的。

【NIO模型】

Selector最终决定哪一组注册Socket主备执行I/O,这种I/O操作设置为非阻塞模式。通过通知,一个线程可以同时处理多个并发连接。

[ 优点 ]

1.可以用较少的线程处理更多连接,意味着更少的开销在内存和上下文切换上

2.当没有I/O处理时,线程可以被重定向到其他任务上。

【Netty的特点】

[ 设计 ]

  1.针对多种传输类型的统一接口——阻塞和非阻塞

  2.简单但更强大的线程模型

  3.真正的无连接的数据报套接字支持

  4.链接逻辑支持复用

[ 性能 ]

  1.比核心Java API更好的吞吐量,较低的延时

  2.资源消耗更少,这个得益于共享池和重用

  3.较少内存拷贝

[特点]

  1.消除由于慢、快或重载连接产生的OOM错误

  2.消除经常发现在NIO高速网络中的应用中的不公平的读/写比。

[ 安全 ]

  1.完整的SSL/TLS和StartTLS的支持

  2.运行在受限环境例如 Applet或OSGI

  

01_Netty简述的更多相关文章

  1. 简述 OAuth 2.0 的运作流程

    本文将以用户使用 github 登录网站留言为例,简述 OAuth 2.0 的运作流程. 假如我有一个网站,你是我网站上的访客,看了文章想留言表示「朕已阅」,留言时发现有这个网站的帐号才能够留言,此时 ...

  2. JavaScript单线程和浏览器事件循环简述

    JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...

  3. Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】

    原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...

  4. Android网络定位服务定制简述

    Android 添加高德或百度网络定位服务 Android的网络定位服务以第三方的APK方式提供服务,由于在国内Android原生自带的com.google.android.gms服务几乎处于不可用状 ...

  5. 《Entity Framework 6 Recipes》翻译系列 (1) -----第一章 开始使用实体框架之历史和框架简述

    微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF ...

  6. 简述ASP.NET MVC原理

    1.为什么ASP.NET需要MVC? 因为随着网站的的数量级越来越大,原始的网站方式,这里指的是WebForm,在运行速度和维护性方面,以及代码量上面,越来越难以满足日益庞大的网站维护成本.代码的重构 ...

  7. Design Patterns Simplified - Part 2 (Singleton)【设计模式简述--第二部分(单例模式)】

    原文链接: http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part-2-singleton/ De ...

  8. 【翻译】设计模式学习系列1---【Design Patterns Simplified: Part 1【设计模式简述:第一部分】】

    原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part1/ Design Pattern ...

  9. Android开发3:Intent、Bundle的使用和ListView的应用 、RelativeLayout(相对布局)简述(简单通讯录的实现)

    前言 啦啦啦~博主又来骚扰大家啦~大家是不是感觉上次的Android开发博文有点长呢~主要是因为博主也是小白,在做实验的过程中查询了很多很多概念,努力去理解每一个知识点,才完成了最终的实验.还有就是随 ...

随机推荐

  1. es6学习 1

    块级作用域绑定 一 var 声明及变量提升(Hoisting)机制 在函数作用域或全局作用域中通过 var 声明的变量,无论实际上是在哪里声明的,都会被当成在当前作用域顶部声明的变量,这就是我们常说的 ...

  2. Scala 中使用 akka system 的 scheduler 的例子

    这是在scala控制台直接执行的例子.   import akka.actor._ import scala.concurrent.duration._ import scala.concurrent ...

  3. notepad++中配置python运行命令

    1.安装notepad++ 2.打开notepad++ 3.键盘上按下“F5”,在弹出的命令菜单中输入“cmd /k C:\Python30\python.exe "$(FULL_CURRE ...

  4. (转)mysql主从切换步骤

    原文:http://6226001001.blog.51cto.com/9243584/1723273 1> 正常切换 1)从服务器检查SHOW PROCESSLIST语句的输出,直到你看到Ha ...

  5. docker相关命令

    1. 进入docker容器 ① 查看运行的容器:docker ps -a ②  进入容器:docker exec -ti [容器id] bash ③ 退出容器:eixt

  6. ubuntu16.04下ftp服务器的安装与配置

    由于要将本地程序上传至云服务器中,所以需要给云服务器端安装ftp服务器.记录一下ftp的安装过程,以便以后使用.服务器端所用系统为Ubuntu16.04. 1. 安装ftp服务器, apt-get i ...

  7. 设计模式--策略模式(strategy)

    1.策略模式(strategy ['strætədʒi]) 我的理解是:方案候选模式 (反正关键就是有很多的候选,哈哈) 看了很多例子,都是在说鸭子的,那个例子很好,在这里可以看 他们生产鸭子,我们就 ...

  8. 使用VNC访问Windows桌面

    1. 背景介绍 两台电脑,一个笔记本,一个台式机 笔记本上装的是Windows 10, 通过上网小助手上网 (P.S.  上网小助手...Stupid Policy...) 台式机上装的是Ubuntu ...

  9. UVM系统验证基础知识0(Questasim搭建第一个UVM环境)

    版权声明:本文为Times_poem原创文章,转载请告知原博主.特别声明:本文在原文基础上做了简单修改以适应文中举例在questasim下的运行,敬请原博主谅解. 需求说明:UVM系统验证 内容   ...

  10. WordNet::Similarity的安装和使用

    简介 WordNet::Similarity是一个Perl实现的软件包,可以用来计算两个概念(或者word sense)之间的语义相似度,它提供了六种计算相似度和三种计算概念之间关联度的方法,所有的这 ...