- 博客(29)
- 资源 (28)
- 收藏
- 关注
转载 浅谈 Linux下的零拷贝机制
什么是零拷贝维基上是这么描述零拷贝的:零拷贝描述的是CPU不执行拷贝数据从一个存储区域到另一个存储区域的任务,这通常用于通过网络传输一个文件时以减少CPU周期和内存带宽。零拷贝给我们带来的好处:减少甚至完全避免不必要的CPU拷贝,从而让CPU解脱出来去执行其他的任务减少内存带宽的占用通常零拷贝技术还能够减少用户空间和操作系统内核空间之间...
2018-07-29 00:19:04 239
转载 netty源码分析(二十五)Netty自定义协议与TCP粘包拆包问题解决之道
上一节说了TCP的粘包和拆包,用一个实例的方式做了说明,那么在netty里面是怎么解决粘包和拆包问题呢,这就需要编解码器,我们写一个简单的自动以协议的demo,说明一下编解码器在解决tcp粘包和拆包的解决方式。 先罗列一下服务端的代码: MyServer负责服务端的启动:public class MyServer { public static ...
2018-07-29 00:18:04 930 5
转载 netty源码分析(二十四)TCP粘包与拆包实例演示及分析
关于粘包与拆包的概念这里不再熬术,下面举一个粘包的例子: 客户端启动的时候向服务端写入了10条消息,然后服务端接收到消息之后,回写客户端一条UUID,客户端打印服务端发过来的UUID MyServer:public class MyServer { public static void main(String[] args) throws I...
2018-07-29 00:17:49 268
转载 netty源码分析(二十三)ReplayingDecoder源码分析与特性解读以及其他编解码器介绍
在介绍ReplayingDecoder之前 想看一下它的用法,构建一个服务端和客户端的模型: 服务端:public class MyServer { public static void main(String[] args) throws InterruptedException { EventLoopGroup bossGr...
2018-07-29 00:17:40 256
转载 netty源码分析(二十二)Netty编解码器剖析与入站出站处理器详解
Netty处理器重要概念: 1、Netty的处理器可以分为两类:入栈处理器和出栈处理器。 2、入栈处理器的顶层是ChannelInboundHandler,出栈处理器的顶层是ChannelOutboundHandler。 3、数据处理时常用的各种编解码器本质上都是处理器。 4、编解码器:无论我们是向网络中写入数据是什么类型(int、char、String、...
2018-07-29 00:17:31 337
转载 netty源码分析(二十一)Netty数据容器ByteBuf底层数据结构深度剖析与ReferenceCounted初探
ByteBuf ByteBuf是Netty提供的代替jdk的ByteBuffer的一个容器,首先看一下他的具体用法:public class ByteBufTest0 { public static void main(String[] args) { ByteBuf byteBuf = Unpooled.buffer(10);/...
2018-07-29 00:17:24 328
转载 netty源码分析(二十)NIO堆外内存与零拷贝深入讲解
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(512); 直接内存:返回DirectByteBuffer对象,DirectByteBuffer的父类是MappedByteBuffer ,MappedByteBuffer 的父类是ByteBuffer , 在ByteBuffer的上边是Buffer,在 ...
2018-07-29 00:17:16 293
转载 netty源码分析(十九)Netty项目开发过程中常见且重要事项分析
一、服务端在回写数据到客户端的时候可以有一下2中方式: 在Netty中有22种发送消息的方式,可以直接写到Channel中,也可以写到与ChannelHandler所关联的那个ChannelHandlerContext中,对于前一种方式来说,消息会从ChannelPipeline的末尾开始流动,对于后一种方式来说,消息将从ChannelPipleline中...
2018-07-28 00:06:35 428
转载 netty源码分析(十八)Netty底层架构系统总结与应用实践
一个EventLoopGroup当中会包含一个或多个EventLoop。一个EventLoop在它的整个生命周期当中都只会与唯一一个Thread进行绑定。所有由EventLoop所处理的各种I/O事件都将在它所关联的那个Thread上进行处理。一个Channel在它的整个生命周期中只会注册在一个EventLoop上。一个EventLoop在运行过程中,会...
2018-07-28 00:06:29 3577
转载 netty源码分析(十七)Netty线程模型深度解读与架构设计原则
上次分析到:public abstract class SingleThreadEventLoop extends SingleThreadEventExecutor implements EventLoop public ChannelFuture register(final ChannelPromise promise) { ...
2018-07-28 00:06:23 276
转载 netty源码分析(十六)Channel选择器工厂与轮询算法及注册底层实现
上一节说到注册的入口,即 MultithreadEventLoopGroup: public ChannelFuture register(Channel channel) { return next().register(channel); }123注册channel第一步调用了next()方法,next()是Multit...
2018-07-28 00:06:17 325
转载 netty源码分析(十五)Channel注册流程深度解读
前边的介绍是netty对一些组件初始化的过程,接下来是第二部分,注册,还是之前的initAndRegister方法: final ChannelFuture initAndRegister() { Channel channel = null;...略 channel = channelFactory.new...
2018-07-28 00:05:53 407
转载 netty源码分析(十四)Netty初始化流程总结及Channel与ChannelHandlerContext作用域分析
我们回到ServerBootstrap的init方法,之前介绍过Attribute的设置,那么Attribute的具体设置是怎样的呢: void init(Channel channel) throws Exception { final Map<ChannelOption<?>, Object> options ...
2018-07-28 00:03:49 602
转载 netty源码分析(十三)Netty核心四大组件关系与构建方式深度解读
上一节主要看了一下ChannelHandlerContext,中间我们走到DefaultChannelPipeline的addLast方法,这一节我们从addLast方法切入: 其中group为null,name为nullpublic class DefaultChannelPipeline implements ChannelPipeline {.....
2018-07-28 00:03:01 788
转载 netty源码分析(十二)Channel与ChannelHandler及ChannelHandlerContext之间的关系分析
还是之前的init代码入口,上一节我们介绍了ChannelOption和AttributeKey,本次我们说下Channel与ChannelHandler及ChannelHandlerContext之间的关系分析。void init(Channel channel) throws Exception { final Map&lt;Channel...
2018-07-28 00:01:40 555
转载 netty源码分析(十一)Netty常量池实现及ChannelOption与Attribute作用分析
ServerBootstrap的init方法是服务初始的关键逻辑: void init(Channel channel) throws Exception { final Map&lt;ChannelOption&lt;?&gt;, Object&gt; options = options0();//是一个linkedHashMap...
2018-07-28 00:01:31 1178
转载 netty源码分析(十)ChannelPipeline创建时机与高级拦截过滤器模式的运用
ChannelPipeline的创建时机: 我们从服务端的入口main程序开始: 1、ChannelFuture channelFuture = serverBootstrap.bind(8899).sync();12、 AbstractBootstrap: public ChannelFuture bind(SocketAddre...
2018-07-27 22:58:06 311
转载 netty源码分析(九)Reactor模式与Netty组件对比及Acceptor组件的作用分析
Reactor模式的角色构成(Reactor模式一共有5种角色构成 ): 1、Handle(句柄或是描述符):本质上表示一种资源,是由操作系统提供的;该资源表示一个个的事件,比如说文件描述符,活是 针对网络编程中的Socket描述符,事件既可以来自外部,也可以来自内部,外部事件比如说客户端的连接请求,客户端发送过来数据等;内部事件比如说操作系统产生的定时器任...
2018-07-27 22:56:27 528
转载 netty源码分析(八)Netty的自适应缓冲区分配策略与堆外内存创建方式
我们总结一下netty的模式: bossGroup将得到的selectedKyes中的socketchannel接收到,然后封装成NioServerSocketChannel,NioServerSocketChannel注册到workerGroup里边,最后客户端直接和workerGroup 里边的NioServe...
2018-07-27 22:55:03 1105
转载 netty源码分析(七)Acceptor与Dispatcher角色分析
理解Reactor模式的另外一篇文章是一篇论文:《reactor-siemens》,论文的环境是日志服务器的例子: 客户端将日志发送到日志服务器,日志服务器将日志通过各种设备输出。 意图: The Reactor design pattern handles service requests that are ...
2018-07-27 22:53:15 370
转载 netty源码分析(六)Reactor模式透彻理解及其在Netty中的应用
前边讲了EventLoopGroup的一些知识,在netty的架构这块我们使用一种bossGroup加workerGroup的方式,bossGroup只负责请求的转发,workerGroup是具体的数据处理,其实netty整个框架使用的是Reactor(响应器)的设计模式。这方面知名的大佬就是Doug Lea,Java.u...
2018-07-27 22:51:44 618
转载 netty源码分析(五)Netty服务器地址绑定底层源码分析
AbstractBootstrapd的initAndRegister方法,完成 初始化和注册: final ChannelFuture initAndRegister() { Channel channel = null; try { ch...
2018-07-27 22:47:56 413
转载 netty源码分析(四)Netty提供的Future与ChannelFuture优势分析与源码讲解
上一节我们讲到netty启动服务类AbstractBootstrap的doBind的方法: private ChannelFuture doBind(final SocketAddress localAddress) { final ChannelFuture regFut...
2018-07-27 22:29:03 2784
转载 netty源码分析(三)Netty服务端ServerBootstrap的初始化与反射在其中的应用分析
上一节说到EventLoopGroup只是对bossGroup和workerGroup的一些初始化,包括线程数量,执行器(命令模式),我们的服务端接下来使用ServerBootstrap对bossGroup和workerGroup进行了包装,整个过程是一个方法链的调用过程,每个方法返回调用者本身: 然后进行了启动,先...
2018-07-27 22:23:34 460
转载 netty源码分析(二)Netty对Executor的实现机制源码分析
上一节说到NioEventLoopGroup 的初始化,到了他的父类MultithreadEventExecutorGroup的构造器: protected MultithreadEventExecutorGroup(int nThreads, Executor executor, ...
2018-07-27 22:20:58 645
转载 netty源码分析(一)EventLoopGroup
首先我们使用netty建立一个服务端和客户端,功能是相互之间发消息,代码 我们把服务端的主要代码贴出来:package com.ceaser.netty.secondexample;import io.netty.bootstrap.ServerBootstrap;import io.netty.chan...
2018-07-27 22:18:22 1653
转载 Java 泛型详解
1. 概述泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。什么是泛型?为什么要使用泛型?泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类...
2018-07-19 10:45:08 102
原创 Ubuntu下解决Git保存用户名和密码的方法
在使用Git 的时候,经常会遇到需要频繁输入密码的情况,每次git push 和 git pull 都要求输入用户名和密码,如果提交频繁的话就十分不方便。那么怎么在Ubuntu下解决Git保存用户名和密码呢?1、进入Git 配置文件。zqj@Zqj-ubuntu:~$ vim ~/.gitconfig 2、修改配置文件,添加下面这一行。[credential] helper = store...
2018-07-07 15:23:47 736
转载 foreach循环中为什么不要进行remove/add操作
先来看一段代码,摘自阿里巴巴的java开发手册1 List<String> a = new ArrayList<String>();2 a.add("1");3 a.add("2");4 for (String temp : a) {5 if("1".equals(temp)){6 a.remove(temp);7 } 8 }...
2018-07-05 18:03:37 302
spring整合redis小demo
2018-04-09
dubbo/zookeeper
2018-03-13
架构师特刊:深入浅出Netty.pdf
2017-12-24
JSP+Servlet+Tomcat应用开发从零开始学修正版
2016-06-02
带括号的四则运算表达式js实现
2016-04-29
jsp ajax 文件上传(包含图片)
2015-10-29
JSP+Servlet+Tomcat应用开发从零开始学
2015-07-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人