memcached 源码阅读笔记】的更多相关文章

阅读 memcached 最好有 libevent 基础, memcached 是基于 libevent 构建起来的. 通由 libevent 提供的事件驱动机制触发 memcached 中的 IO 事件. 个人认为, 阅读源码的起初最忌钻牛角尖, 如头文件里天花乱坠的结构体到底有什么用. 源文件里稀里哗啦的函数是做什么的. 刚开始并没必要事无巨细弄清楚头文件每个类型定义的具体用途; 很可能那些是不紧要的工具函数, 知道他的功能和用法就没他事了. 来看 memcached 内部做了什么事情. m…
上一篇博客(CI框架源码阅读笔记4 引导文件CodeIgniter.php)中,我们已经看到:CI中核心流程的核心功能都是由不同的组件来完成的.这些组件类似于一个一个单独的模块,不同的模块完成不同的功能,各模块之间可以相互调用,共同构成了CI的核心骨架. 从本篇开始,将进一步去分析各组件的实现细节,深入CI核心的黑盒内部(研究之后,其实就应该是白盒了,仅仅对于应用来说,它应该算是黑盒),从而更好的去认识.把握这个框架. 按照惯例,在开始之前,我们贴上CI中不完全的核心组件图: 由于BenchMa…
到了这里,终于进入CI框架的核心了.既然是“引导”文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.com/usr/reg 经过引导文件,实际上会交给Application中的UsrController控制器的reg方法去处理. 这之中,CodeIgniter.php做了哪些工作?我们一步步来看. 1.    导入预定义常量.框架环境初始化 之前的一篇博客(CI框架源码阅读笔记2 一切的入口 ind…
从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap引导文件都会最先引入全局函数,以便于之后的处理工作). 打开Common.php中,第一行代码就非常诡异: if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 上一篇(CI框架源码阅读笔记2 一切的入口 index…
上一节(CI框架源码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程,这里再次贴出流程图,以备参考: 作为CI框架的入口文件,源码阅读,自然由此开始.在源码阅读的过程中,我们并不会逐行进行解释,而只解释核心的功能和实现. 1.       设置应用程序环境 define('ENVIRONMENT', 'development'); 这里的development可以是任何你喜欢的环境名称(比如dev,再如test),相对应的,你要在下面的switch case代码块中…
大约寒假开始的时候我就已经把std::sort的源码阅读完毕并理解其中的做法了,到了寒假结尾,姑且把它写出来 这是我的第一篇源码阅读笔记,以后会发更多的,包括算法和库实现,源码会按照我自己的代码风格格式化,去掉或者展开用于条件编译或者debug检查的宏,依重要程度重新排序函数,但是不会改变命名方式(虽然MSVC的STL命名实在是我不能接受的那种),对于代码块的解释会在代码块后(下面)用注释标明. template<class _RanIt, class _Diff, class _Pr> in…
Core::Ray 该类用来表示空间中的“射线”,主要用来进行碰撞检测. THREE.Ray = function ( origin, direction ) { this.origin = ( origin !== undefined ) ? origin : new THREE.Vector3(); this.direction = ( direction !== undefined ) ? direction : new THREE.Vector3(); }; Ray类的构造函数颇为简单,…
PHP源码阅读笔记一一.explode和implode函数array explode ( string separator, string string [, int limit] )此函数返回由字符串组成的数组,每个元素都是 string 的一个子串,它们被字符串 separator 作为边界点分割出来.如果设置了 limit 参数,则返回的数组包含最多 limit 个元素,而最后那个元素将包含 string 的剩余部分. 此函数的时间复杂度应该是O(strlen(separator) * s…
AQS源码阅读笔记 先看下这个类张非常重要的一个静态内部类Node.如下: static final class Node { //表示当前节点以共享模式等待锁 static final Node SHARED = new Node(); //表示当前模式以独占模式等待锁 static final Node EXCLUSIVE = null; //表示当前线程等待锁的动作被取消了(那么当前节点将会在下一次迭代节点的时候被踢出) static final int CANCELLED = 1; //…
title: libevent源码阅读笔记(一):libevent对epoll的封装 最近开始阅读网络库libevent的源码,阅读源码之前,大致看了张亮写的几篇博文(libevent源码深度剖析 http://blog.csdn.net/sparkliang/article/details/4957667 ),对libevent网络库有了总体上的认识,然后开始源码的阅读. 与整体把握不同,我是先从局部开始阅读libevent的源码,当然,前提是我已经大致了解了整个libevent的框架结构,今…
接着Mina源码阅读笔记(四)-Mina的连接IoConnector1,,我们继续: AbstractIoAcceptor: 001 package org.apache.mina.core.rewrite.service; 002   003 import java.io.IOException; 004 import java.net.SocketAddress; 005 import java.util.ArrayList; 006 import java.util.Collections…
Map是Java collection framework 中重要的组成部分,特别是HashMap是在我们在日常的开发的过程中使用的最多的一个集合.但是遗憾的是,存放在HashMap中元素都是无序的,原因是我们在put或get数据的时候都是根据key的hash值来确定元素的位置.在具体的业务场景中,我们更多的希望对于HashMap集合能够进行顺序访问,好在 jdk 中已经给我们提供了一种解决方案,那就是LinkedHashMap.该类继承与HashMap,因此HashMap拥有的特性它都有,同时…
gogs 源码阅读笔记 001 gogs项目相当不错,本笔记实际是基于gogs fork版本 git-122a66f. gitea (gitea版本由来)[https://blog.gitea.io/2016/12/welcome-to-gitea/] TODO 源码结构 编译执行 功能表一览 功能对应源码走读 源码结构 gogs的源码结构,应该是遵循了作者的 go项目代码规范 . 以下为一般项目结构,根据不同的 Web 框架习惯,可使用括号内的文字替换:根据不同的项目类型和需求,可自由增删某些…
自己保存的源码阅读笔记哈 faster rcnn 的主要识别过程(粗略) (开始填坑了): 一张3通道,1600*1600图像输入中,经过特征提取网络,得到100*100*512的feature map (设定stride = 16,这是坐标计算要用的),基于这个,生成100 * 100 * scale * aspdio 的anchor box,然后, 这个feature map 通过使用两个卷积网络分别回归目标非目标和bbox_dealta,两个,分别是rpn_objectness_predi…
Apollo源码阅读笔记(二) 前面 分析了apollo配置设置到Spring的environment的过程,此文继续PropertySourcesProcessor.postProcessBeanFactory里面调用的第二个方法initializeAutoUpdatePropertiesFeature(beanFactory),其实也就是配置修改后更新相关处理逻辑. 在继续分析之前,先来看下配置是怎么自动更新的. 1. 配置更新简单示例 通过portal页面,修改配置之后,我们可以通过@Ap…
Apollo源码阅读笔记(一) 先来一张官方客户端设计图,方便我们了解客户端的整体思路. 我们在使用Apollo的时候,需要标记@EnableApolloConfig来告诉程序开启apollo配置,所以这里就以EnableApolloConfig为入口,来看下apollo客户端的实现逻辑.关于apollo的使用方法详见 这里 1. 入口 @EnableApolloConfig 注解 @EnableApolloConfig(value={"application","test-…
前言 cjson 的代码只有 1000+ 行, 而且只是简单的几个函数的调用. 而且 cjson 还有很多不完善的地方, 推荐大家看完之后自己实现一个 封装好的功能完善的 cjson 程序. json 基本信息 在阅读 json 之前, 建议阅读一下 json 的官方介绍. 如果上面的英文吓到你了的话, 可以看看这个中文翻译版本. 我的 这个 cjson 是从官网指定的地方下载的 ourceforge. 在看完官网的介绍后,我们知道 json 的 value 存在这么几种类型: 对象, 数组,…
HashMap源码阅读笔记 本文在此博客的内容上进行了部分修改,旨在加深笔者对HashMap的理解,暂不讨论红黑树相关逻辑 概述   HashMap作为经常使用到的类,大多时候都是只知道大概原理,比如底层是由数组+链表+红黑树实现,使用HashMap存储自定义类时需要重写其hashCode和equals方法等等--但对其具体如何实现却知之甚少,本文将作为类似笔记的形式记录笔者的源码阅读方式.(在JDK 1.7及其之前由数组加链表组成,正常情况想我们谈论的均为JDK 1.8及其之后的HashMap…
简介 ArrayList是开发中使用比较多的集合,它不是线程安全的,CopyOnWriteArrayList就是线程安全版本的ArrayList.CopyOnWriteArrayList同样是通过数组实现,这个类的名字叫"CopyOnWrite ",它是在写入的时候拷贝数组,对副本进行操作. 原理 CopyOnWriteArrayList采用了一种读写分离的并发策略.CopyOnWriteArrayList容器允许并发读,读操作是无锁的,性能较高.至于写操作,比如向容器中添加一个元素,…
guavacache源码阅读笔记 官方文档: https://github.com/google/guava/wiki/CachesExplained 中文版: https://www.jianshu.com/p/88ec858cc021?from=singlemessage 参考文档: 美团技术团队:<缓存那些事儿> https://tech.meituan.com/2017/03/17/cache-about.html ​ 缓存在很多数情况下都非常有用,例如,如果计算一个值或者获取一个值时…
JDK1.8源码阅读笔记(1)Object类 ​ Object 类属于 java.lang 包,此包下的所有类在使⽤时⽆需⼿动导⼊,系统会在程序编译期间⾃动 导⼊.Object 类是所有类的基类,当⼀个类没有直接继承某个类时,默认继承Object类,也就是说任何 类都直接或间接继承此类,Object 类中能访问的⽅法在所有类中都可以调⽤. Object类源码: native关键字 ​ Java有两种方法:Java方法和本地方法.Java方法是由Java语言编写,编译成字节码,存储在class文件…
JDK1.8源码阅读笔记(2) AtomicInteger AtomicLong AtomicBoolean原子类 Unsafe Java中无法直接操作一块内存区域,不能像C++中那样可以自己申请内存和释放内存.Java中的Unsafe类为我们提供了类似C++手动管理内存的能力.Unsafe类是"final"的,不允许继承. Number类(abstract) xxxValue()方法:将 Number 对象转换为xxx数据类型的值并返回. Atomic Boolean-Integer…
写在前面 mxnet代码的规范性比Caffe2要好,看起来核心代码量也小很多,但由于对dmlc其它库的依赖太强,代码的独立性并不好.依赖的第三方库包括: cub dlpack dmlc-core googletest mkldnn mshadow onnx-tensorrt openmp ps-lite tvm 如果对于这些第三方库没有足够的理解,mxnet的核心代码看起来比较费劲.因此时间原因,本篇仅解析了mxnet对外的接口include目录,并且对于严重依赖第三方库的文件没有深入探究,只能…
Linux 0.11源码阅读笔记-文件管理 文件系统 生磁盘 未安装文件系统的磁盘称之为生磁盘,生磁盘也可以作为文件读写,linux中一切皆文件. 磁盘分区 生磁盘可以被分区,分区中可以安装文件系统,常见的文件系统有fat32.ext2.ext4等.分区后的磁盘结构布局如下图,其中主引导扇区记录了分区信息,并且包含引导代码可用于引导操作系统. 文件系统 分区内可以安装指定文件系统,同一磁盘多个分区文件系统不要求相同.MINIX文件系统布局如下: 引导块:若作为引导分区,将存放操作系统的引导程序代…
Linux 0.11源码阅读笔记-中断过程 是什么中断 中断发生时,计算机会停止当前运行的程序,转而执行中断处理程序,然后再返回原被中断的程序继续运行.中断包括硬件中断和软件中断,硬中断是由外设自动产生的,软中断是程序通过int指令主动调用.中断产生时,会有一个中断号,根据中断号可在中断向量表中选择对应的中断处理程序执行. 中断在linux当中非常重要,是用户态代码与和心态代码相互切换运行的桥梁.进程调度依赖于时钟中断进入内核,系统调用也是依赖int 80软中断进入内核执行. 中断处理过程 以i…
Linux 0.11源码阅读笔记-总览 阅读源码的目的 加深对Linux操作系统的了解,了解Linux操作系统基本架构,熟悉进程管理.内存管理等主要模块知识. 通过阅读教复杂的代码,锻炼自己复杂项目代码的阅读能力.对于一般简短的程序,可以从main函数逐行阅读理解:对于复杂的项目,只能在了解源码主要结构的情况下,抓住某个具体的功能进行阅读. 选择较早版本的理由 Linux较新版本代码在百万行以上,而0.11版本内核不超过2万行代码.比较新版本的Linux内核源码太多且内容庞杂,自身能力不足,没有…
最开始使用CI框架的时候,就打算写一个CI源码阅读的笔记系列,可惜虎头蛇尾,一直没有行动.最近项目少,总算是有了一些时间去写一些东西.于是准备将之前的一些笔记和经验记录下来,一方面权作备忘,另一方面时刻提醒自己:借鉴和学习才有出路,忘记过去意味着背叛! 基本术语说明 在本文开始之前,有必要对文中反复出现的术语做一个简单的说明,如果你对这一部分已经熟谙,完全可以略过.本文中反复出现和提及的术语包括: 前端控制器(Front Controller): 用于集中控制用户的所有请求的组件,将用户的请求发…
前言 作为一个Java开发者,工作了几年后,越发觉力有点不从心了,技术的世界实在是太过于辽阔了,接触的东西越多,越感到前所未有的恐慌. 每天捣鼓这个捣鼓那个,结果回过头来,才发现这个也不通,那个也不精.就连我吃饭的家伙Java,现在想想,其实我根本就不了解. 可是每当编写简历的时候,总想把工作经验.工作年限写的长一点,半年写成一年,一年写成两年.可是每当有人问我技术原理的时候,又会想, 我的工作时间要是短一点的话,答不上来是不是就不会这么丢脸. 还记得刚工作不久,就在项目中使用过Spring了,…
JSONModel是一个解析服务器返回的Json数据的库. http://blog.csdn.net/dyllove98/article/details/9050905 通常服务器传回的json数据要通过写一个数据转换模块将NSDictionary转换为Model,将NSString数据转换为Model中property的数据类型. 这样服务器如果要做修改,可能需要改两三个文件. JSONModel的出现就是为了将这种解析工作在设计层面完成. 使用方法:参考连接 对其源码的核心部分JSONMod…
1. 写在前面 对于做Java开发的同学来说,Spring就像是一条绕不过去的路,但是大多数也只是停留在对Spring的简单使用层面上,对于其背后的原理所知不多也不愿深究,关于这个问题,我在平时的生活及工作中也在不断思考. 为什么要阅读Spring的源码? 不是为了读源码而读源码,Spring有很好的设计思想,值得学习: Spring是当前使用最广泛的一个开发框架,学习其原理可以帮助我们更好的应对工作中出现的各种框架相关的问题: 在开发中越来越多的使用到了各种各样的框架,渐渐的开发人员只会引入j…