自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 行文本文件实时分析器,流量统计数据采集

介绍 因项目需要,最近采用inotify和IO多路复用技术,实现了一个轻量级的实时行文本文件内容提取的程序,主要目的是用来监控网关nginx的Access Log,并且对Access Log在本地进行实时解析,字段提取和上报的功能。该程序占用内存较小,在10k左右,最多占用1个核的资源,提供采样上...

2019-12-04 21:24:34 172 0

原创 【建设服务化体系工具集】JAVA注解实现在线文档,SDK版本管理,工程基线管理和在线测试工具

简要介绍 在工程中,我们采用protobuf V3和SpringBoot搭建服务化体系,我们需要一个基于protobuf协议的辅助工具提升效率。我们提供服务级别和方法级别的文档注解,在工程编译期间产生文档数据,利用这些文档数据生成在线文档和接口测试界面,同时提供在线协议编辑器,编译工具,打包和上传...

2019-10-09 13:47:45 342 0

原创 JAVA注解实现Memcached分片

代码地址:https://github.com/gilbertwang1981/annotation-utils.git 使用例子 实现自定义分片策略类 package com.vip.cart.mc; import com.hs.base.cache.memcached.Memcache...

2019-08-22 11:02:45 278 0

原创 JAVA注解实现数据库分库

代码地址:https://github.com/gilbertwang1981/annotation-utils.git 使用案例: 新建YML配置,application.yml; # 数据源配置,这里配置三个数据源,ds0~ds2 spring: datasource: dr...

2019-07-28 08:17:27 272 0

原创 基于商品属性的相似度模型

2018-09-06 11:06:27 1672 3

原创 利用线性回归进行销售预测

2018-03-27 15:35:05 1174 0

原创 基于一阶马尔科夫链的凑单算法

2018-03-27 15:08:56 411 0

原创 NGINX 1.13.6内存管理源码分析

该文是针对NGINX 1.13.6这个版本进行分析

2017-12-27 12:29:23 307 0

原创 分布式本地缓存的一种实现

源代码 JavaSDK:https://github.com/gilbertwang1981/string_local_cache.git C++ Agent:https://github.com/gilbertwang1981/binary_log_agent.git C++公...

2017-08-11 22:18:57 4541 1

原创 朴素贝叶斯分类算法

朴素贝叶斯算法的核心是,属性条件独立,求按照某个属性进行归类的条件概率最大值。

2017-03-25 10:24:11 464 0

原创 基于改造后的REDIS的实时监控架构

摘要 要做到秒级的数据采集,最重要的就是要快,同时在采集数据时,尽可能少的暂用业务进程的资源。同时,我们可以把任何统计指标建模成一个计数器。这里使用了一种方法,利用REDIS的高性能以及对计数器的支持,能帮助实现秒级监控数据采集。 源码 GITHUB:https://github.c...

2016-11-25 15:58:05 2668 0

原创 机器学习之分类决策树算法

2016-08-16 15:46:13 406 0

原创 机器学习之K近邻算法

2016-08-16 15:42:03 314 0

原创 MooseFS源码分析(三)

2015-07-04 16:58:56 1225 1

原创 MooseFS源码分析(二)

2015-07-04 16:56:51 1450 0

原创 MooseFS代码分析(一)

2015-07-04 16:52:42 1164 0

原创 FSM (Finite State Machine Framework)源码共享

FSM - Finite State Machine Framework implementation

2010-12-20 20:42:00 1277 3

原创 分析linux共享内存的实现

Linux对共享内存的实现,在2.6采用了内存映射技术。对于内存共享,主要集中在三个内核函数,他们是do_shmat,sys_shmat和sys_shmdt。其中,sys_shmat调用了do_shmat最终实现了共享内存的attach。sys_shmdt实现了共享内存的detach和destro...

2009-07-04 21:03:00 15010 0

原创 linux 2.6 互斥锁的实现-源码分析

看了看linux 2.6 kernel的源码,下面结合代码来分析一下在X86体系结构下,互斥锁的实现原理。代码分析1. 首先介绍一下互斥锁所使用的数据结构:struct mutex { 引用计数器 1: 所可以利用。  小于等于0:该锁已被获取,需要等待 atomic_t  count;  自旋锁...

2009-07-02 21:51:00 10107 1

原创 GCC如何支持函数别名

通过使用以下关键字和语法,可以为函数申明别名。int __sctp_connectx(int fd, struct sockaddr *addrs, int addrcnt){ socklen_t addrs_size = __connectx_addrsize(addrs, addrcnt); ...

2009-04-23 16:28:00 1101 0

原创 Linux AIO机制

Linux的I/O机制经历了一下几个阶段的演进:1. 同步阻塞I/O: 用户进程进行I/O操作,一直阻塞到I/O操作完成为止。2. 同步非阻塞I/O: 用户程序可以通过设置文件描述符的属性O_NONBLOCK,I/O操作可以立即返回,但是并不保证I/O操作成功。3. 异步事件阻塞I/O: 用户进程...

2009-01-18 10:24:00 16396 4

原创 slab函数分析之free_block

下面分析一下slab对象回收的实现参数:1. slab对象所属的kmem_cache缓存2. slab对象数组3. 需要释放的对象数量4. 在NUMA环境下节点编号static void free_block(struct kmem_cache *cachep, void **objpp, int...

2009-01-02 13:19:00 1771 0

原创 slab函数分析之cache_alloc_refill

当array cache中没有可用的object的时候,需要批量从slab缓存中申请对象,这个时候该函数被调用。下面分析一下这个函数。static void *cache_alloc_refill(struct kmem_cache *cachep, gfp_t flags){ int batch...

2009-01-02 11:57:00 4168 0

原创 slab函数分析之cache_grow

当向Slab缓存中提出对象申请的请求时,首先是找到相应的kmem_cache,然后从相应的array cache中分配slab对象。当array cache中没有对象可以分配的时候,会批量向slab缓存中提出对象申请来填满array cache,然后再从array cache中取出一个对象分配出去...

2008-12-31 23:41:00 1660 1

原创 Slab对象的分配和回收kmem_bufctl_t的用法

在这里我介绍一下Slab对象的分配和回收kmem_bufctl_t的用法,首先要说明的一点是Slab缓存的内存布局,Slab缓存分为两部分,一部分是用于管理Slab对象,另一部分是Slab对象本身,针对这两部分内容,Slab缓存的内存布局大概有两种:1. Slab对象同管理Slab对象的缓存一起存...

2008-12-29 23:36:00 2318 0

原创 Slab函数分析之kmem_cache_create函数

该函数用于创建Slab缓存。参数介绍:name: 缓存名字size: 对象的大小align:对齐flag:Slab标志位ctor:对象构造函数dtor:对象析构函数struct kmem_cache *kmem_cache_create (const char *name, size_t size...

2008-12-28 14:13:00 11565 0

原创 Slab代码分析之calculate_slab_order

计算Slab的Order,即该Slab是由几个页面构成static inline size_t calculate_slab_order(struct kmem_cache *cachep,   size_t size, size_t align, unsigned long flags){ si...

2008-12-28 13:02:00 1988 1

原创 Slab对象数量计算函数

内核提供了计算一个Slab缓存的大小的函数,Slab缓存的内存布局分成以下两种:1. Slab缓存管理区在Slab内,即同对象存放在一起。2. Slab缓存管理区存放在单独的一片区域,即同对象分别存放。通过宏CFLGS_OFF_SLAB来区分。参数介绍:gfporder: Slab缓存大小为2^g...

2008-12-25 21:15:00 1173 0

原创 Linux kmalloc/kfree 源码解读

kmalloc/kfree用于划分和回收内核空间低区内存的方法。改组方法没有直接通过伙伴系统进行内存的划分,通过slab算法进行分配的。同时也为每个CPU提供一个阵列缓存,用于提高分配效率。下面对改组函数进行源码级的分析。内存分配static inline void *kmalloc(size_t...

2008-12-16 20:21:00 7887 0

原创 Linux Buddy系统算法源码解析

在Linux引导起来之后,伙伴系统分配算法是和物理内存最底层的接口。所有内存分配函数,比如vmalloc/kmalloc最后都是通过伙伴算法对内存进行分配的。接下来我们将解读一下伙伴系统的分配和回收算法。伙伴系统模块提供了两个主要的接口给上层程序,他们是:1.         页面请求函数stru...

2008-12-14 22:12:00 5574 0

原创 Linux vmalloc/vfree函数实现解读

高端物理地址的分配采用vmalloc/vfree这组函数进行,什么是高端物理内存呢?我们知道Linux给内核预留了一部分虚拟地址空间,这部分虚拟地址如果能全部直接映射到物理地址空间就不存在高端内存。如果这部分内存有一部分不能直接映射到地址空间,那么这部分虚拟地址空间称为高端内存。因此,高端内存是虚...

2008-12-14 11:38:00 1602 0

原创 初始化页表

之前我们已经在内存中为页目录表预留了空间,现在我们将初始化页目录表,页目录表一共有1024个表项。前768个表项为用户空间预留,后面256个表项为内核空间预留,暂时只考虑映射4G空间。在内核空间中,在main函数中,不能通过用户空间的页表访问内核,所以,之前在head.s中设置的映射内核空间的页目...

2008-10-19 12:11:00 862 0

原创 linux2.4 启动代码head.S分析

32位启动代码,暂时不考虑SMP的情况。关键代码分析页目录表的起始地址在0x101000,由于目前仍然处于实模式,地址都是物理地址开始启动内核startup_32: 清方向标志位 cld 用内核数据段的地址来初始化ds,es,fs,gs寄存器 宏__KERNEL_DS在segment.h中有定义,...

2008-10-18 21:31:00 1157 0

原创 linux内核分析之panic.c

#include #include void sys_sync(void);死机,内核出现重大错误volatile void panic(const char * s){ printk("Kernel panic: %s/n/r",s);        如果当前进程是第一个进程...

2008-09-30 09:44:00 2082 0

原创 linux内核分析之printk.c

#include #include #include static char buf[1024];extern int vsprintf(char * buf, const char * fmt, va_list args);内核打印函数,该函数调用了tty_write函数,该函数需要使用fs寄存...

2008-09-30 09:38:00 1957 0

原创 linux内核分析之vsprintf.c

#include #include 判断给定字符是不是0-9的数字#define is_digit(c) ((c) >= 0 && (c) 将给定数字字符串转换成整型static int skip_atoi(const char **s){ int i=0;  判断字符是不是...

2008-09-30 09:02:00 2212 0

原创 linux内核分析之sys.c

#include #include #include #include #include #include #include 这个文件中包含了绝大部分系统调用函数的实现,如果系统调用在该内核版本中没实现,就直接返回ENOSYSint sys_ftime(){ return -ENOSYS;}int...

2008-09-29 09:41:00 3241 0

原创 linux内核分析之fork.c

#include #include #include #include #include 申明外部调用函数,验证地址所指向的页面是否可写extern void write_verify(unsigned long address);全局变量,用于产生可用的进程idlong last_pid=0;对...

2008-09-27 21:53:00 1635 1

原创 linux内核分析之exit.c

#include #include #include #include #include #include #include int sys_pause(void);int sys_close(int fd);释放当前进程,对进程进行清理void release(struct task_struc...

2008-09-25 23:13:00 1593 0

原创 linux内核分析之signal.c函数

该文件分装了信号处理函数#include #include #include #include 用volatile修饰符修饰函数,表示该函数不会返回,并且保证编译器不会给出告警volatile void do_exit(int error_code);取得当前进程被阻塞的信号掩码int sys_s...

2008-09-23 21:39:00 1940 0

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