如果不了解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. easyui DataGrid 工具类之 WorkbookUtil class

    /** * @Title: WorkbookUtil.java * @Description: excel工具类 * @date 2014年5月29日 上午10:36:42 * @version V1 ...

  2. Masonry的使用

     1.//添加了这个宏,就不用带mas_前缀了 #define MAS_SHORTHAND //添加了这个宏,equalTo就等于mas_equalTo #define MAS_SHORYHAND_G ...

  3. c++中的重载(Overload)、覆盖(重写,Override) 、隐藏与using声明

    这些概念有时记住了,但可能没多久就忘了,还是记下来吧.网上找的一篇不错:这里  1 重载与覆盖 成员函数被重载的特征: (1)相同的范围(在同一个类中,不包括继承来的): (2)函数名字相同: (3) ...

  4. (转)jQuery源码解读 -- jQuery v1.10.2

    原文GitHub链接: https://github.com/chokcoco/jQuery-

  5. javascript 组合

    1. 大数组中有m个元素,抽取其中的n个进行组合. var combination = function(arr, num){ var r=[]; (function f(t,a,n) { ) { r ...

  6. 【Python】Python3中的str和bytes

    参考文章:Python 3的bytes/str之别 len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数 >>> len('ABC') 3 >& ...

  7. iOS Library not loaded: Reason: image not found

    iOS Library not loaded: ReactiveCocoa.framework ...Reason: image not found 解决办法:BuildPhases中,将对应的框架的 ...

  8. arguments的理解

    (function(){ return typeof arguments; })(); 无聊的时候看看网上的面试题.个人认为通过面试题可以对某个知识点能够更加认识,踩过坑才会明白坑是有多大.代码中经常 ...

  9. Nginx+Tomcat发布时不间断服务的提供

    原理 1.使用Nginx反向代理事项负载均衡,至少两个Tomcat(tomcatA+TomcatB)同时提供服务. 2.发布时配置Nginx的nginx.conf,只让其中的TomcatA临时提供所有 ...

  10. FFmpeg官方文档之————先进音频编码(AAC)

    先进音频编码(AAC)的后继格式到MP3,和以MPEG-4部分3(ISO / IEC 14496-3)被定义.它通常用于MP4容器格式; 对于音乐,通常使用.m4a扩展名.第二最常见的用途是在MKV( ...