自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

没有进步就是退步

个人博客:https://callmejiagu.github.io/

  • 博客(13)
  • 资源 (10)
  • 收藏
  • 关注

原创 FileChannle 和 MMAP 高性能分析

前言上一篇的博客中,我从底层上分析了BufferInputStream为什么效率会比FileInputStream来得高,这两种方式都是传统的IO,在JDK1.4 中NIO又多了两种新的IO方式:FileChannle 和 MMAP。这里着重来解释FileChannle的高性能的场景。FileChannleFileChannel 存在于 java.nio 包中,属于 NIO 的一种,但是注...

2018-12-30 12:39:28 1658 1

原创 BufferedInputStream 底层原理解析

前言RMQ中为了实现高性能在IO上做了很多优化,在阿里中间件性能挑战赛也可以看到很多大神们在IO上花了很多功夫去分析优化,这篇主要来解析一下BufferedInputStream的实现原理,看看它在IO上做了哪些优化。误区看到很多文章是这么描述BufferedInputStream性能高的原因:BufferedInputStream 将数据先保存在了缓存区,从而减少磁盘IO操作次数,提高I...

2018-12-28 10:57:08 1225 2

转载 内存映射 mmap的理解(转载+整理)

前言上一篇解释了RMQ为了提高大文件的读写效率,使用了内存映射的方法,将磁盘上的文件与进程中的进程虚拟空间进行了映射,减少一次内核空间到用户空间的一次复制。看到这里我就有了疑惑,既然内存映射有这么好的特性,为什么还需要传统的IO呢?看下文的分析。进程中的虚拟内存mmap是将文件与进程虚拟空间进行了映射,所以你需要先明白进程虚拟空间是什么概念。下图的左边就是一个进程地址空间可视图。你可以...

2018-12-21 19:47:10 7419 1

转载 RocketMQ 源码分析 消息存储(预备知识二)(转载+整理)

前言在RMQ中为了提高commitlog文件的读写效率,而采用了一个叫做内存映射的技术。按照我的理解,内存映射在处理大文件上有非常大的性能提升,所以这篇来记录一下我对内存映射的理解。用户态和内核态我们都知道操作系统分为用户态和内核态,内核态表示当前为内核程序执行时的状态,用户态是用户程序代码运行的状态。用户态是不能直接和物理设备打交道的,如果想把硬盘的一块区域读到用户态,则需要两次拷贝(硬...

2018-12-21 09:31:04 404 1

原创 RocketMQ 源码分析 消息存储(预备知识一)

前言看到RocketMQ的性能问题的时候,通常能看到page cache、顺序IO写、预读等,要想设计出一个高性能的中间件,这部分的知识是绝对要掌握的。顺序IO读写为什么速度更快当需要从硬盘上读取一个文件时,首先会要求磁头定位到这个文件的起始扇区。这个定位过程包括两个步骤: 磁头定位到对应的磁道; 主轴马达带动盘片转动到正确的位置。这个过程所花费的时间被称为寻址时间。也就是说寻址时间实际...

2018-12-19 12:45:14 449

原创 读源码感

前言最近的时间差不多都围绕着RocketMQ的学习上,一开始从了解RocketMQ的场景到RocketMQ的一个使用,然后到源码的阅读。前面两个过程无需多说,到了读源码的阶段,我时常问自己,读这份源码的意义在于哪?感想我从namesrv的启动类入手开始阅读,作为切入点我觉得没错,但是时常因为某个细枝末节的事情从而打断对整块功能块的认识。这点我觉得是在读源码的一个误区吧,首先你想要掌握所有的...

2018-12-19 12:44:28 483

原创 RocketMQ 源码分析 BrokerStartUp(七)

前言broker是消息接收处理,消息落地的核心模块。这个模块用于接收producer发送的消息以及consumer消费的消息。 本章从broker的启动类入手分析一下broker启动的过程。分析broker是为了能够搞明白master和slave之间的关系,以及消息落地的具体过程。createBrokerControllerbroker启动会获取外部传入的初始化参数, 也会从配置文件中加...

2018-12-14 12:02:48 1093

原创 RocketMQ 源码分析 NettyRemotingServer(六)

前言已经写了几篇关于RocketMQ源码的分析,可能对其逻辑处理会多一点认识,但还没深入到RocketMQ精髓中。比如MQ中的通信是如何实现的、如何实现高性能,高可用、最终一致性、MQ 消息存储。这些才是我们阅读源码的一个目标。所以这篇通过分析源码的来了解一下RocketMQ通信机制。本文很大部分摘录了 匠心独运的博客。NettyRemotingServerRocketMQ中RPC通信的...

2018-12-14 12:01:36 1017

原创 RocketMQ 源码分析 BrokerHousekeepingService(五)

前言RocketMQ在早期版本使用的是Zookeeper,考虑到Zookeeper不够轻量,后面用namesrv来代替。熟悉Zookeeper的知道它使用心跳检测来判断服务是否正常,那么namesrv肯定也少不了这块功能,那么它是怎么判断一个Broker节点是否Live呢?如果一个Broker断开了namesrv是如何处理的呢?在前面篇章提到NamesrvController的构造函数中有一个...

2018-12-13 09:13:19 981 2

原创 RocketMQ 源码分析 RouteInfoManager(四)

前言在上一章分析了NamesrvController的构造函数时,会生成一个RouteInfoManager对象,该对象存放着整个消息集群的相关消息,所以这里单独拿出来分析。其实试想一下namesrv的功能不就是一个提供了通信功能的一个队列嘛,而RouteInfoManager保留了所有信息的路由。所以要想弄明白RocketMQ,RouteInfoManager必须要攻下。RouteInfo...

2018-12-12 09:40:05 1145 1

原创 RocketMQ 源码分析 NamesrvController(三)

前言上一篇在讲到createNamesrvController方法的时候,根据NamesrvConfig和NettyServerConfig对象生成了一个NamesrvController对象,当时并没有deep到该类中,所以这篇来记录一下NamesrvController构造函数的分析。NamesrvController类下面是NamesrvController的构造类,这里重点关注的是...

2018-12-11 09:34:38 592

原创 RocketMQ 源码分析 NamesrvStartup(二)

前言上一篇讲到使用命令行启动namesrv时,最终会以NamesrvStartup作为为启动类,所以这篇主要来记录一下NamesrvStartup的源码分析。分析的RocketMQ的版本是4.3.1。NamesrvStartup首先我觉得在看源码的时候,需要把握住一个类的大概流程,而不是看到一个功能块就deep进去。首先要明白namesrv是用来做什么的,简单的来考虑就是一个提供了通信功能...

2018-12-11 09:30:31 931

原创 RocketMQ 源码分析 nameser启动(一)

前言在RocketMQ中,NameServer的目的是为了解耦Broker和Producer、Consumer。官方文档对NameServer有一个概括:NameServer是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。而且在启动MQ的时候,第一个启动必须是NameServer。所以这篇主要来记录一下NameServer启动的源码分析。脚本启动无论在Windows或者是Linux...

2018-12-08 20:31:09 875

搜狗新闻分类语料

整理自搜狗实验室中的新闻分类。含有金融、体育、军事等11个分类集。

2018-10-30

hibernate开发包

hibernate开发包

2017-06-11

spring3.0.5-dist.rar

spring开发包

2017-06-08

navicat_mysql

11.0版本的navicat

2017-06-01

杭电数据结构01-15年真题答案

历年师兄传下来的答案,有需要的下载

2017-03-04

杭电数据结构01-16年真题

包括最近一年的16年真题到01年

2016-10-02

android-async-http-1.4.7.jar

2016-06-18

学生管理数据库系统

用mysql,apache,php编写的学生管理系统课程设计

2015-06-21

SDK迷宫游戏

利用SDK完成的小游戏,没有什么算法,简单的判断。

2015-06-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除