如果不了解netty的,可以百度下,netty社区现在也比较活跃。
现在所谓的大数据,flume,storm等底层都是netty。
 
netty的性能模型:
io模型---->异步非阻塞io
1:jdk1.4开始提供了非阻塞io,即nio
jdk1.5以后,epoll代替了poll,打破了selector上链路的限制。
 
2:零拷贝
directbuffer vs heapbytebuffer
netty不用任何配置,默认线程发送和接受使用的就是directbuffer。
如果使用堆内存,tcp读取一条消息码流,先从fd句柄里读到directbuffer,然后从directbuffer拷贝到heapBuffer。
使用directbuffer,少了一次内存拷贝。
 
组合的buffer
我们做rpc或者私有协议时候,通常的消息都是由head和body组成,每次发送消息时都会内存拷贝,把老的buffer拷贝到新的buffer,把老的释放掉,再更新最新的buffer。但是使用组合的buffer时,可以把多个buffer聚合成一个buffer操作。
 
文件传输transferTo
在很多操作系统时,它会做优化,会在文件缓冲区,直接写到channel,省去了堆的操作。
 
3:内存池
poolbytebufAllocator
 
数据协议---->可定制的编解码框架
可定制的序列化框架,netty不绑架任何序列化工具。java序列化效率比较低,有兴趣的朋友可以自己做个试验。
 
线程模型---->reactor线程模型
 
1.单线程模型:
 
2.多线程模型:
 
3.无锁化串行设计:
java1.5以后,引入了线程池的概念,动态扩展。
netty使用了串行设计,串行化过程中,不存在锁的概念,如果多个串行共同执行效果避免了多线程竞争导致性能下降。
 
netty的可靠性:
netty提供了读空闲、写空闲、读写空闲的检测。
通常节点内部通信都是长连接,长连接一般都会做心跳检测,为了防止误判,连续xx次后关闭重连等。
我所接触的游戏都是自己设计channelHandler,然而netty本身提供了这种检测机制。监听这个event事件就可以了。
 
reactor线程保护
某个消息的异常不应该导致整条链路不可用
某条链路不可用不应该导致其他链路不可用
这与分布式服务,就是服务节点了,后面一章分析netty源码时会详细的说下。
 
jdk epoll空轮训:
空轮训导致cpu100%的bug,这个bug到现在也没有修复,内部设计的复杂程度可以想象。
但是netty采用的是rebuild,就是检测到的时候,把之前selector关闭(之前的channel转移到新的selector上)。
 
安全性:
ssl单向认证
 
内存分配与流量整形

二:基础概述netty的更多相关文章

  1. Netty那点事: 概述, Netty中的buffer, Channel与Pipeline

    Netty那点事(一)概述 Netty和Mina是Java世界非常知名的通讯框架.它们都出自同一个作者,Mina诞生略早,属于Apache基金会,而Netty开始在Jboss名下,后来出来自立门户ne ...

  2. Laxcus大数据管理系统2.0(2)- 第一章 基础概述 1.1 基于现状的一些思考

    第一章 基础概述 1.1 基于现状的一些思考 在过去十几年里,随着互联网产业的普及和高速发展,各种格式的互联网数据也呈现爆炸性增长之势.与此同时,在数据应用的另一个重要领域:商业和科学计算,在各种新兴 ...

  3. 【MySQL】MySQL无基础学习和入门之一:数据库基础概述和实验环境搭建

    数据库基础概述  大部分互联网公司都选择MySQL作为业务数据存储数据库,除了MySQL目前还有很多公司使用Oracle(甲骨文).SQLserver(微软).MongoDB等. 从使用成本来区分可以 ...

  4. SQL Tuning 基础概述10 - 体会索引的常见执行计划

    在<SQL Tuning 基础概述05 - Oracle 索引类型及介绍>的1.5小节,提到了几种"索引的常见执行计划": INDEX FULL SCAN:索引的全扫描 ...

  5. 「kuangbin带你飞」专题十二 基础DP

    layout: post title: 「kuangbin带你飞」专题十二 基础DP author: "luowentaoaa" catalog: true tags: mathj ...

  6. SQL Tuning 基础概述10

    在<SQL Tuning 基础概述05 - Oracle 索引类型及介绍>的1.5小节,提到了几种"索引的常见执行计划": INDEX FULL SCAN:索引的全扫描 ...

  7. [java学习笔记]java语言基础概述之数组的定义&常见操作(遍历、排序、查找)&二维数组

    1.数组基础 1.什么是数组:           同一类型数据的集合,就是一个容器. 2.数组的好处:           可以自动为数组中的元素从零开始编号,方便操作这些数据. 3.格式:  (一 ...

  8. Netty学习(二)-Helloworld Netty

    这一节我们来讲解Netty,使用Netty之前我们先了解一下Netty能做什么,无为而学,岂不是白费力气! 1.使用Netty能够做什么 开发异步.非阻塞的TCP网络应用程序: 开发异步.非阻塞的UD ...

  9. Oracle基础概述

    本部分主要参考”风哥“的Oracle入门视频. 一.体系结构概述 1.物理结构(文件结构) Oracle有四种文件:控制文件.数据文件.日志文件.参数文件 其中日志文件分为两类:联机日志文件.归档日志 ...

随机推荐

  1. http常见状态码解析

    自定义 Ajax原生编写ajax:function(opt){ var xmlhttp; //创建对象 if (window.XMLHttpRequest){// code for IE7+, Fir ...

  2. javascirpt对象运用与JS变量

    abcdefghijklmnopqrstuvwyz String 对象方法 charAt() 方法可返回指定位置的字符.stringObject.charAt(index)(index从0开始)[ht ...

  3. Web Performance Test : 为Request的Post参数名添加XPath支持

    问题描述 本文的标题看起来有些含糊其辞,这里我需要把问题阐述得更加清楚.这是我们使用VSTS进行Web Performance Test时,Asp.net造成的特定问题(也许其他开发工具或插件也会造成 ...

  4. iOS_XCode7_Launch Image 的初使用

    之前一直没有做笔记的习惯,后来发现很多知识不常用,容易忘了,再去网上找的,很浪费时间,现在尝试着自己写写博客,可以是自己笔记,方便以后查询,如果有纰漏,欢迎指正. 1.Xcode7中 ,assets. ...

  5. .NET HttpWebRequest/WebClient网络请求第一次很慢解决方案

    不使用代理: <?xml version="1.0" encoding="utf-8" ?> <configuration> <s ...

  6. JS高级程序设计 笔记

    1.instanceof 可以判断实例是否在某个对象的原型上: function A() { this.a = "a"; } function B() { this.b = &qu ...

  7. vim添加未识别文件类型

    这里用.c的文件格式来识别.nc文件 $ cd ~/.vim/ftdetect $ vim nc.vim # nc.vim内容 # au BufRead,BufNewFilE *.nc set fil ...

  8. 基础笔记12(socket,url网络通信)

    进一步深入socket 1.网络通信条件: .IP地址,可用主机名. .传输数据时将不用的应用程序通过数字标识区分开来,这种标识称为逻辑端口,也称端口.(0-65535端口,一般系统预留0-1024) ...

  9. Java里面获取当前服务器的IP地址

    public static void main(String[] args) { try { InetAddress address = InetAddress.getLocalHost();//获取 ...

  10. Spring 配置解析之Properties

    http://www.cnblogs.com/dragonfei/archive/2016/10/09/5906474.html *********************************** ...