如果不了解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. Computed read-only property vs function in Swift

    In the Introduction to Swift WWDC session, a read-only property description is demonstrated: class V ...

  2. Android BinderService 过程

    步骤:建立服务器端服务,暴露接口 1.BinderService /** * @Title BinderService.java * @package cn.boxai.binderservice * ...

  3. 统计图表类型选择应用总结&表数据挖掘方法及应用

    数据挖掘方法及应用: 图表注意事项 • 信息完整:图表标题.单位.图例.脚注.来源等 • 避免无意义的图表 • 一表反映一个观点 • 只选对的不选复杂的图表 • 标题一句话阐述清楚反映观点 确定对比关 ...

  4. ATS

    一) 起因:由于苹果规定2017年1月1日以后,所有APP都要使用HTTPS进行网络请求. 之前,可以在Info.plist中禁用ATS功能,按如下设置即可. <key>NSAppTran ...

  5. C# 统计在线人数和总访问人数

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  6. 合并excel中多个sheet

    Sub 合并当前工作簿下的所有工作表() Application.ScreenUpdating = False For j = 1 To Sheets.Count If Sheets(j).Name ...

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

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

  8. 【转】Python3.x和Python2.x的区别

    这个星期开始学习Python了,因为看的书都是基于Python2.x,而且我安装的是Python3.1,所以书上写的地方好多都不适用于Python3.1,特意在Google上search了一下3.x和 ...

  9. CSS3的基础用法

    CSS3的现状:1.浏览器支持程度差,需要添加私有前缀 2.移动端支持优于PC端 3.不断改进中 4.应用相对广泛 在CSS3中增加新增了许多灵活查找元素的方法,极大的提高了查找元素的效率和精准度.C ...

  10. python3 实现简单信用卡管理程序

    1.程序执行代码: #Author by Andy #_*_ coding:utf-8 _*_ import os,sys,time Base_dir=os.path.dirname(os.path. ...