【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

  

最新文章

  1. 《Spark快速大数据分析》—— 第七章 在集群上运行Spark
  2. ubuntu制作本地源
  3. Oracle 子查询
  4. Struts2知多少(1) Struts2 MVC架构
  5. Easyui使用记录
  6. php 获取当前url,可以规避框架url重写后还有index.php的情况
  7. RHEL 7 命令行注册和激活订阅服务
  8. 当页面中(比如弹出框SelectPage)没有textbox等控件如何按Esc关闭
  9. 浅谈c#接口的问题,适合新手来了解
  10. C#判断网站运行状态是否正常
  11. 黑马程序员:Java基础总结----静态代理模式&动态代理
  12. java排序算法之冒泡排序(Bubble Sort)
  13. Java EE之Hibernate异常总结org.hibernate.MappingException: Repeated column in mapping for entity:
  14. sdn测量论文简介
  15. HyperLogLog 算法的原理讲解以及 Redis 是如何应用它的
  16. codeforces518B
  17. php 实现八皇后问题
  18. python变量内存地址释放与加速并行计算多线程
  19. cocos2d-x3.0 后配置信息重置
  20. C#-MessageBox全部函数重载形式及举例

热门文章

  1. MNIST手写数字识别 Tensorflow实现
  2. [ZJOI2019]语言[树链的并、线段树合并]
  3. LCS and LIS
  4. create-react-app安装出错问题解决
  5. 在windows上部署使用Redis--资料整理
  6. rabbitmq无用使用guest用户远程连接
  7. Java简单聊天室
  8. switch表达式、case穿透
  9. 原来你是这样的http2......
  10. 通过POST请求上传文件