自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lc的大脑备份

lc的大脑容量有限,在此记录lc的生活点滴

  • 博客(43)
  • 收藏
  • 关注

原创 JDK源码阅读之HashSet

HashSet 实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证Set的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null 元素。HashSet 为基本操作提供了稳定性能,这些基本操作包括 add、remove、contains 和size,假定哈希函数将这些元素正确地分布在桶中。对此 set 进行迭代所需的时间与HashSet 实例的大小(元

2014-03-28 14:25:48 2372

原创 JDK源码阅读之HashMap的实现

基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。迭代 collection 视图所需的时间

2014-03-27 20:35:01 2283

原创 JDK源码阅读之AbstractSet和AbstractQueue

AbstractSet 提供 Set 接口的骨干实现,从而最大限度地减少了实现此接口所需的工作,此类并没有重写 AbstractCollection 类中的任何实现。它仅仅添加了 equals 和 hashCode 的实现。AbstractQueue提供某些 Queue 操作的骨干实现。此类中的实现适用于基本实现不 允许包含 null 元素时。//继承了AbstractCollecti

2014-03-27 19:52:25 1535 1

原创 JDK源码阅读之AbstractMap

AbstractMap 提供 Map 接口的骨干实现,以最大限度地减少实现此接口所需的工作。//实现了接口Mappublic abstract class AbstractMap implements Map { protected AbstractMap() {//提供一个空的构造函数 } public int size() {//返回元素个数

2014-03-27 19:30:42 1643

原创 JDK源码阅读之Queue接口和Deque接口

Queue 除了基本的 Collection 操作外,还提供其他的插入、提取和检查操作。每个方法都存在两种形式:一种抛出异常(操作失败时),另一种返回一个特殊值(null 或false,具体取决于操作)。插入操作的后一种形式是用于专门为有容量限制的 Queue 实现设计的。Deque支持在两端插入和移除元素。大多数 Deque 实现对于它们能够包含的元素数没有固定限制,但此接口既支持有容量

2014-03-27 17:45:58 1487

原创 JDI源码阅读之SortedMap和SortedSet

SortedMap提供关于键的总体排序 的 Map。该映射是根据其键的自然顺序进行排序的,或者根据通常在创建有序映射时提供的Comparator 进行排序。SortedSet提供关于元素的总体排序 的 Set。这些元素使用其自然顺序进行排序,或者根据通常在创建有序 set 时提供的Comparator 进行排序。//接口SortedMap,继承了Map接口public int

2014-03-27 13:51:03 1411

原创 JDK源码阅读之Map接口和Set接口

Map是将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值,只允许包含一个null键值。Set是一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。//Map接口,K为键值,V为值对象pu

2014-03-27 13:35:14 1633

原创 JDK源码阅读之AbstractList

此类提供 List 接口的骨干实现,以最大限度地减少实现“随机访问”数据存储(如数组)支持的该接口所需的工作。对于连续的访问数据(如链表),应优先使用AbstractSequentialList,而不是此类。与其他抽象 collection 实现不同,编程人员不必 提供迭代器实现;迭代器和列表迭代器由此类在以下“随机访问”方法上实现:get(int)、set(int, E)、add(int,

2014-03-27 13:14:02 1620

原创 JDK源码阅读之List和AbstractSequentialList

List是有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。AbstractSequentialList提供了 List 接口的骨干实现,从而最大限度地减少了实现受“连续访问”数据存储(如链接列表)支持的此接口所需的工作。//List接口,继承于Collec

2014-03-26 17:43:52 1323

原创 JDK源码阅读之AbstractCollection抽象类

此类提供 Collection 接口的骨干实现,以最大限度地减少了实现此接口所需的工作,下面我们看看其实现,看看如何通过迭代器实现集合的一些操作。//Collection的骨干实现public abstract class AbstractCollection implements Collection { protected AbstractCollection() {//每个

2014-03-26 16:46:29 1235

原创 JDK源码阅读之Collection分析

Collection接口是所有集合类的父接口,其提供了一些通用的方法,但未提供任何具体的实现,提供此类是为了能统一的以接口的方式使用一些方法,下面我们看看其提供了哪些方法。//继承了迭代器的接口,即所有的集合类都是可以使用foreach这种使用方法public interface Collection extends Iterable { int size();//返回元素个数

2014-03-26 16:21:47 1494

原创 JDK源码阅读之String

String是平常使用最多的结构之一,String提供来很多方便的接口来处理字符串,同时其支持正则表达式,所以字符串处理能力很强,下面我们简单介绍下String的内部实现,重点关注下常用的一些方法实现,String的一些方法涉及到字符编码,这里不介绍字符编码相关的。

2014-03-26 15:42:35 1613

原创 JDK源码阅读之Arrays

Arrays是一个工具类,提供了排序,搜索等的操作方法,Arrays提供的方法都是静态方法,Arrays的构造函数是私有的,也就是不能被实例化,同时,我们可以从名称可以看到Arrays操作的数据都是以数组的形式进行的,Collection里面的排序和搜索都是将Collection转换为Array之后进行,看看神秘的JDK的排序和搜索是怎么实现的?

2014-03-26 14:50:09 1705

原创 Memcached源码分析之资源分享

这次的Memcached源码分享总共写了20篇文章,主要是记录自己看源码的一个过程,因为我们大脑不靠谱。在看源码过程中,已有的一些文章帮助很大,在学习了很多人的文章之后,自己分析源码,过程才没那么痛苦,下面就把我认为好的文章分享出来,这些文章涵盖了Memcached的各个方面,大家在学习Memcached的过程中可以参考。Facebook对memcached的提升Memcached源码分析...

2014-03-26 13:18:57 9614 1

原创 Memcached源码解析之cas属性

cas即compare and set或者compare and swap,是实现乐观锁的一种技术,乐观锁是相对悲观锁来说的,所谓悲观锁是在数据处理过程中,完全锁定,这种能完全保证数据的一致性,但在多线程情况下,并发性能差,通常是使用各种锁技术实现;而乐观锁是通过版本号机制来实现数据一致性,过程中会使用CPU提供的原子操作指令,乐观锁能提高系统的并发性能,Memcached使用cas是保证数据的一致性,不是严格为了实现锁。Memcached是多客户端应用,在多个客户端修改同一个数据时,会出现相互覆盖的情况

2014-03-26 12:52:54 3398

原创 Memcached源码分析之内存池

Memcached内部维护了一个内存池来减少频繁的malloc和free,在该内存池的基础上面实现了slab内存管理,下面简单介绍下内存池的实现,大家在实现类似结构时,可以做个参考。

2014-03-25 21:44:48 3955

原创 Memcached源码解析之连接队列

Memcached中Master线程和Worker线程之间通信连接信息时,是通过连接队列来通信的,即Master线程投递一个消息到Worker线程的连接队列中,Worker线程从连接队列中读取链接信息来执行连接操作,空闲链表类似于一种连接池的实现,服务器开发中经常需要各种池操作,大家在实现类似池时,可以做参考。

2014-03-25 21:28:09 3400

原创 Memcached源码分析之Hash表操作

Memcached的Hash表用来提高数据访问性能,通过链接法来解决Hash冲突,当Hash表中数据多余Hash表容量的1.5倍时,Hash表就会扩容,Memcached的Hash表操作没什么特别的,我们这里简单介绍下Memcached里面的Hash表操作。

2014-03-25 20:55:37 3149

原创 Memcached源码分析之LRU操作

LRU是最近最少使用的简称,该技术经常用来实现cache数据更新,Memcached使用LRU技术来淘汰老的数据,Memcached默认是启用LRU操作的,在这种情况下所有的set操作都会成功,如果Memcached的内存池已经使用完,则会淘汰老数据来存放新数据,如果关闭了Memcached的LRU,则当Memcached没有多余的内存空间时,Memcached之间返回错误。

2014-03-25 20:41:43 3576

原创 Memcached源码分析之do_item_alloc操作

前面我们分析了Memcached的set操作,其set操作在经过所有的数据有效性检查之后,如果需要存储item,则会执行item的实际存储操作,我们下面分析下其过程。//执行item的存储操作,该操作会将item挂载到LRU表和slabcalss中item *do_item_alloc(char *key, const size_t nkey, const int flags,

2014-03-25 19:54:39 2987

原创 Memcached源码分析之set操作

Memcached的set操作内部流程分析。

2014-03-25 19:22:29 3156

原创 Memcached源码阅读之get过程

Memcached的get操作在读取数据时,会判断数据的有效性,如果数据已经过期,直接删除(不是删除内存空间,而只是释放数据所占用的内存空间),这样不用额外的去处理过期数据,操作简单。

2014-03-24 21:09:59 3258

原创 Memcached源码分析之item结构

Memcached的内存结构,Memcached使用了slab内存池技术,自行管理内存,提高了内存的使用率,减少了内存碎片。

2014-03-24 20:48:21 3185

原创 Memcached源码分析之Hash表扩容

Hash表是Memcached里面最重要的结构之一,其采用链接法来处理Hash冲突,当Hash表中的项太多时,也就是Hash冲突比较高的时候,Hash表的遍历就脱变成单链表,此时为了提供Hash的性能,Hash表需要扩容,Memcached的扩容条件是当表中元素个数超过Hash容量的1.5倍时就进行扩容,扩容过程中会采用2个Hash表,将老表中的数据通过Hash算法映射到新表中,每次移动的桶的数目可以配置,默认是每次移动老表中的1个桶。

2014-03-24 19:44:39 3069

原创 Memcached源码分析之状态机(三)

Memcached协议分析之业务状态机

2014-03-24 19:10:11 2784

原创 Memcached源码分析之状态机(二)

Memcached业务状态机,读取(TCP和UDP)网络数据,看看memcached怎么使用网络缓冲区读取TCP数据。

2014-03-24 13:29:17 2970 1

原创 Memcached源码分析之状态机(一)

Memcached业务处理状态机

2014-03-23 17:55:44 3910

原创 Memcached源码阅读之线程交互

Memcached线程间连接分发

2014-03-23 16:50:51 3044

原创 c语言实现抽象数据类型(信息隐藏)

所谓抽象数据类型,是指模块具有功能说明和接口说明,前者说明模块所执行的任务,后者定义模块的使用。但是,模块的用户并不需要知道模块实现的任何细节,而且除了那些定义好的接口之外,用户不能以任何方式访问模块,这个定义觉得是不是和面向对象语言的类的定义类似呢,c没提供类这种结构,c实现抽象数据类型的武器其实是static关键字。c语言有三种链接属性,即external(外部),internal(内部)

2014-03-23 15:25:51 3873

原创 Memcached源码阅读之内存初始化

Memcached内存初始化

2014-03-20 21:12:10 2566

原创 Memcached源码分析之网络连接建立

这篇博客主要分析TCP的连接建立,该连接的建立过程也就是添加网络描述符到libevent事件中,这个过程是由主线程(main)驱动的。

2014-03-20 19:11:19 3083

原创 Memcached源码阅读之网络监听的建立

Memcached网络监听的建立,Memcached作为服务器,代码具有很好的参考性,可以直接复用。

2014-03-20 14:54:26 3769

原创 JDK容器类里的迭代器模式学习

迭代器模式又叫游标模式,是提供一种方法用来访问容器内的元素,而不用暴露容器内部的实现。这样有2个明显的好处:1 容器内部的结构发生变化时,如果迭代器本身不发生变化,则外面使用迭代器的业务代码不用修改。2 如果我们需要提供多于一种的迭代方式,则只需增加迭代器,不用修改容器类。这2点也正好满足设计模式所要求的单一职责条例。我们这里重点分析下JDK容器类(ArrayList和

2014-03-19 20:07:20 1954

原创 最近2个Bug的总结

memcpy和strcpy的区别

2014-03-19 18:50:51 1674

原创 Memcached源码阅读之资源初始化

Memcachedhash表,各种统计信息,工作线程,内存结构的初始化流程。

2014-03-19 13:36:53 3184 1

原创 Memcached源码阅读之初始化参数解析

Memcached源码分析之初始化启动参数解析,了解这些参数,才能配置出最高效的memcached.

2014-03-19 10:51:51 3714

原创 Memcached源码阅读之服务器资源调整

Memcached源码阅读之服务器资源调整

2014-03-18 20:03:49 5680 1

原创 linux进程间通信之Msgq

消息队列是进程间通信方式之一,该文章讲解如何使用消息队列。

2014-03-18 19:11:57 4879

原创 glog的安装,配置和使用

glog是google开发的c++环境的日志组件,具体信息请参考官网:https://code.google.com/p/google-glog/下面备注下glog的安装和使用。1 下载glog,下载地址为:https://code.google.com/p/google-glog/downloads/list,源文件就一个,版本为0.3.3。2  解压,我这边是解压到/home/lc

2014-03-18 12:37:55 5245

原创 tinyxml的安装和使用

tinyxml(官网:http://www.grinninglizard.com/tinyxml/)是一个解析xml的c++库,短小惊悍型的,开源软件各个版本差异比较大,我这次下载的版本为tinyxml-2版本,同学们阅读文章时,记得核对版本,下面讲述下其安装和使用。1 下载tinyxml,下载地址为:http://sourceforge.net/projects/tinyxml/,下载之后u

2014-03-18 11:05:27 4809

空空如也

空空如也

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

TA关注的人

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