自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (3)
  • 收藏
  • 关注

原创 停止维护此技术博客

最近把所有技术博客迁往新浪:http://blog.sina.com.cn/kenbinzhang 主要是因为新浪博客在订阅的时候可以全文拉取,very good,并且在文章发表方面的体验也是很棒的。 给大家带来不便敬请谅解:)

2010-04-30 11:01:00 3330

原创 又开源了一个项目

在google  code上又开源了一个项目(http://code.google.com/p/lightwords/ ): lightwords是一个中分分词引擎,用双数组Trie树作为词典结构,采用最短N路径算法构造词图粗切分,后期加工采用隐马尔科夫模型(HMM)进行人名地名识别和词性标注。开发语言是C++。

2010-04-04 17:20:00 3314

原创 开源一个小代码库

在google  code上开源了一个小项目(http://code.google.com/p/liblightstorage/): liblightstorage是一个轻量的文件存储管理库,利用buddy算法管理变长数据的文件存储,利用hash算法管理索引数据的文件存储。 利用buddy算法,文件被分为固定大小的数据块,分配以数据块为单位。其优点是接口简单高效,通

2009-12-11 13:44:00 3884 2

原创 nginx源码分析(19)-方法(3)

 nginx的三个部分:核心、事件模型/并发模型、应用模块,之前已经详细了分析了核心和事件模型/并发模型两个部分,也详细解释了nginx的模块化设计。之前的分析采用了平铺直叙的方式,对源码中主要函数进行了流程化的分解和剖析,经过这种分析方式,对nginx的认识越来越全面和深入,相关的领域知识和背景知识也越来越丰富。但是这种分析方法比较直白,分析不够深入和透彻,缺少总结和对比,只

2009-11-12 13:54:00 9232 3

原创 nginx源码分析(17)-模块分析(3)

 前面已经分析了nginx的事件处理机制的构建阶段,也分析过nginx的进程模型,利用上一篇文章中总结的并发模型设计的知识,先总结介绍一下nginx的并发模型,然后剖析nginx事件处理机制运行阶段的处理过程。nginx的进程模型采用的是prefork方式,预先分配的worker子进程数量由配置文件指定,默认为1。master主进程创建监听套接口并监听客户连接,每个worker

2009-11-02 17:48:00 18669 4

原创 nginx源码分析(18)-基础设施(1)

 从代码的结构看,nginx可以分为三个部分:基础设施、并发模型和应用模块。前面已经介绍了nginx的模块化设计,剖析了nginx的并发模型,并发模型主要是核心类模块和event类模块实现的。应用模块主要是指http类模块和mail类模块,它们实现了nginx作为web服务器、反向代理服务器和邮件代理服务器的功能,应用模块多和相应的领域知识有关,放在最后剖析。基础设施主要包括memory、log、

2009-10-30 17:58:00 6899

原创 nginx源码分析(16)-模块分析(2)

 对一个高性能服务器来说,一般都要求处理速度快和资源占用小,尤其是当服务器遇到C10K问题的时候。要做到处理速度足够快,其并发模型的设计相当关键;而要做到资源尤其是内存资源的占用少,就要依赖于其资源分配和资源管理的方案设计。网上有一些比较apache、lighttpd和nginx的文章,一般认为apache的功能完善,但是并发能力较弱,资源占用较多,一般并发量达到一千以上,服务已经

2009-10-29 12:07:00 5216

原创 nginx源码分析(15)-模块分析(1)

nginx的内部实现上用四个模块上下文结构把所有模块从实现上分开为四种,不同的模块上下文支持不同的模块钩子。如果抛开实现方式,仅仅从功能逻辑上来区分,大致可以把所有模块分为三类,第一类是nginx的内核模块;第二类是http模块;第三类是mail模块。内核模块包含核心类模块、event类模块和没有模块上下文结构的conf模块;http模块是所有的http类模块;mail模块是所有的mail

2009-10-28 11:43:00 5622 1

原创 nginx源码分析(14)-运维与配置(2)

事件模块的指令集主要是配置epoll、kqueue、select、poll等,这些指令控制nginx处理连接的方式,这些指令有: 1、accept_mutex语法形式:accept_mutex [on|off]默认值:on nginx使用accept mutex保护accept()系统调用。accept mutex在不同的系统上会使用原子指令实现或者使用文件上锁实现。 2、

2009-10-24 14:08:00 5032

原创 nginx源码分析(13)-运维与配置(1)

nginx现在已经支持很多功能,系统内已经实现的模块多达72个,这些模块提供了若干配置指令来设置和控制nginx的相关处理过程。 为了能够更深入的进行接下来的源码分析,利用一些篇幅讨论一下nginx的运维和配置相关的内容,主要参考了nginx的英文wiki资料,按照自己的思路整理成nginx的操作和配置指南,可以作为使用nginx的一个起点。 首先简单介绍一下nginx的编译、启动

2009-10-24 11:08:00 5471

原创 memcached文本协议

以下是很早之前写的memcached文件协议介绍,重新发布一次。 考虑到memcached1.2与memcached1.1的协议有些不同,分别论述。 [返回的错误描述信息] 返回的错误描述信息分为三种,带有不同的关键字头: 普通错误信息,比如指令不存在 ERROR/r/n 客户端错误 CLIENT_ERROR /r/n 服务器端错误 SE

2009-10-20 15:07:00 5372

原创 nginx源码分析(12)-进程启动分析(2)

紧接上回。第四个剖析的是worker子进程的执行函数ngx_worker_process_cycle(src/os/unix/ngx_process_cycle.c)。static voidngx_worker_process_cycle(ngx_cycle_t *cycle, void *data){    ngx_uint_t         i;    ngx

2009-10-19 09:49:00 6644

原创 nginx源码分析(11)-进程启动分析(1)

nginx的进程启动过程是在ngx_master_process_cycle(src/os/unix/ngx_process_cycle.c)中完成的(单进程是通过ngx_single_process_cycle完成,这里只分析多进程的情况),在ngx_master_process_cycle中,会根据配置文件的worker_processes值创建多个子进程,即一个master进程和多个work

2009-10-19 09:47:00 7986 1

原创 nginx源码分析(10)-启动过程分析

nginx有两个重要头文件:ngx_config.h和ngx_core.h。src/core/ngx_config.h文件中包含的是和操作系统相关的宏定义和头文件,其中又会包含objs/ngx_auto_headers.h和src/os/unix/ngx__config.h,前面提到过,这个头文件是自动脚本检验操作系统后生成的,这个头文件中包含了一些宏定义,这些宏定义说明了存在哪些与特定操

2009-10-16 16:04:00 9987

原创 nginx源码分析(9)-模块化(4)

模块的上下文是四个结构体定义的:ngx_core_module_t、ngx_event_module_t、ngx_http_module_t、ngx_mail_module_t,分别对应于四类模块。typedef struct {    ngx_str_t             name;    void               *(*create_conf)(ngx_cyc

2009-10-13 12:23:00 8621

原创 nginx源码分析(8)-模块化(3)

接下来剖析模块的指令。模块的指令在源码中是ngx_command_t结构的变量,ngx_command_t的声明在src/core/ngx_conf_file.h中:struct ngx_command_s {    ngx_str_t             name;    ngx_uint_t            type;    char              

2009-10-12 13:31:00 8549 1

原创 nginx源码分析(7)-模块化(2)

分析nginx的模块化架构的实现方式,就要从ngx_module_t结构体入手。ngx_module_t的声明在src/core/ngx_conf_file.h中:#define NGX_MODULE_V1          0, 0, 0, 0, 0, 0, 1#define NGX_MODULE_V1_PADDING  0, 0, 0, 0, 0, 0, 0, 0struc

2009-10-12 09:29:00 12621

原创 nginx源码分析(6)-模块化(1)

源码的src/core目录下实现了不少精巧的数据结构,最重要的有:内存池ngx_pool_t、缓冲区ngx_buf_t、缓冲区链ngx_chain_t、字符串ngx_str_t、数组ngx_array_t、链表ngx_list_t、队列ngx_queue_t、基于hash的关联数组ngx_hash_t、红黑树ngx_rbtree_t、radix树ngx_radix_tree_t等,这些数据

2009-10-12 09:27:00 11158 3

原创 nginx源码分析(4)-方法(1)

看了几天的源码,进度很慢,过于关注代码实现的细节了,反而很难看清整体结构。于是问诸google寻找方法。大体上分析源代码都要经历三遍过程,第一遍是浏览,通过阅读源码的文档和注释,阅读接口,先弄清楚每个模块是干什么的而不关心它是怎么做的,画出架构草图;第二遍是精读,根据架构草图把系统分为小部分,每个部分从源码实现自底向上的阅读,更深入细致的理解每个模块的实现方式以及与模块外部的接口方式等,弄明白模块

2009-10-11 11:01:00 7147 1

原创 nginx源码分析(5)-方法(2)

利用nginx wiki和互联网收集了不少nginx相关的文档资料,但是仔细阅读之后发觉对理解nginx架构有直接帮助的资料不多,一些有帮助的资料也要结合阅读部分源码细节才能搞清楚所述其是,可能nginx在非俄国之外的环境下流行不久,应用还很简单,相关的英文和中文文档也就不够丰富的原因吧。不过还是有一些金子的。如果要了解nginx的概况和使用方法,wiki足以满足需要,wiki上有各个模块的概要和

2009-10-11 11:01:00 10769

原创 nginx源码分析(3)- 自动脚本

nginx的自动脚本指的是configure脚本程序和auto子目录下面的脚本程序。自动脚本完成两件事情,其一是检查环境,其二是生成文件。生成的文件有两类,一类是编译代码需要的Makefile文件,一类是根据环境检查结果生成的c代码。生成的Makefile很干净,也很容易阅读。生成的c代码有三个文件,ngx_auto_config.h是根据环境检查的结果声明的一些宏定义,这个头文件被include

2009-10-11 11:00:00 8847 1

原创 nginx源码分析(2)- 概览

源码分析是一个逐步取精的过程,最开始是一个大概了解的过程,各种认识不会太深刻,但是把这些真实的感受也记录下来,觉得挺有意思的,可能有些认识是片面或者是不正确的,但可以通过后面更深入细致的分析过程,不断的纠正错误和深化理解。源码分析是一个过程,经验是逐步累积起来的,希望文字可以把这种累积的感觉也准确记录下来。现在就看看对nginx源码的第一印象吧。源码包解压之后,根目录下有几个子目录和几个文件,最重

2009-10-11 10:59:00 16084 3

原创 nginx源码分析(1)- 缘起

nginx是一个开源的高性能web服务器系统,事件驱动的请求处理方式和极其苛刻的资源使用方式,使得nginx成为名副其实的高性能服务器。nginx的源码质量也相当高,作者“家酿”了许多代码,自造了不少轮子,诸如内存池、缓冲区、字符串、链表、红黑树等经典数据结构,事件驱动模型,http解析,各种子处理模块,甚至是自动编译脚本都是作者根据自己的理解写出来的,也正因为这样,才使得nginx比其他的web

2009-10-11 10:58:00 15669 7

原创 简与美(7)

脑中的数学是抽象的,手中的数学是简单的。 我们已经介绍了隐马模型,并且用动态规划思想解决了隐马模型提出的两个问题。尤其是第二个问题,和我们接下来要讨论的词性标注有直接关系。 在NPL领域,有一个称为N元模型的语言统计模型,它对应N-1阶马尔科夫模型。 N元模型可用于计算语句W=w1,w2,..,wn的先验概率P(W),在这里用变量W代表一个文本中顺序排列的n个词语。根据概率

2009-10-11 10:52:00 1660 1

原创 简与美(6)

在继续之前,先说些别的。有人问我最近在忙些什么,为什么会研究起NLP(自然语言处理)。这和工作有一定关系,但也不全是。总结一下我这三年来做的事情,围绕着三个技术核心,一个是如何写好代码,一个是存储技术,一个是数据挖掘。在写代码方面,主要是实战和理论学习相结合,在实战中不断改进,去粗存精,进一步从思想上改变认识,以期取得更深的体会。存储方面的研究,始于今年年初,通过这一年来几次重要的

2009-10-11 10:44:00 1241

原创 简与美(4)

脑中的数学是抽象的,手中的数学是简单的。 前面已经讨论了中文分词三个阶段的第一个阶段:字串粗分。经过字串粗分得到一个候选集合,我们也讨论了通过N-最短路径构造一个词图来减少这个候选集合的结果数目。理想情况下,如果这些候选结果包含了正确的分词结果,那么后续的处理就可能把正确的结果找出来,但如果经过粗分,把正确结果已经剥离了,那么后续处理就很难甚至不可能把正确结果找回来了。 实验结果证

2009-10-11 10:43:00 720

原创 简与美(5)

当我搞明白了要把隐马模型说清楚至少再需要3篇的时候,我觉得这是一个陷阱了。不过既然已经决定去做,也有着美好的愿望,就勇往直前吧。有同学反映写的太难理解了,涉及太多的算法。我已经是很努力的写清晰了,那些算法的内里是很美妙的感觉,希望有兴趣的同学能够仔细品味,也可以找一些paper加深理解,实在看不懂,那我只能抱歉了。 脑中的数学是抽象的,手中的数学是简单的。 关于隐马模型,我大概

2009-10-11 10:43:00 868 1

原创 简与美(3)

脑中的数学是抽象的,手中的数学是简单的。 接着谈字串粗分的N-最短路径方法。 所谓N-最短路径就是最少路径和全路径的折中,保留前N长度的路径。N-最短路径方法的基本思想是根据词典,找出字串中所有可能的词构造词图(一种有向无环图),每个词对应图中的一条有向边,并赋给相应的边长(权值)。针对这个词图,N-最短路径求解就是在起点到终点的所有路径中,求出长度值按严格升序排列依次为第1、第2

2009-10-11 10:32:00 876 1

原创 简与美(2)

脑中的数学是抽象的,手中的数学是简单的。 接着谈中文分词。 我们已经讨论了词典的一种快速查询结构:双数组trie树。这种结构只需要通过简单的几次数学计算就可以完成查询,不需要做任何的拷贝和字符串比较。这种结构比较适合于词典不用经常变化的情况,因为这种结构的更新是非常麻烦的,他需要对全局结构进行调整,并且随着词典词数量的增加,调整的时间会越来越长。但是一般的词典都不需要经常更新。

2009-10-11 10:31:00 990

原创 简与美(1)

最近在做项目的时候经常使用数学,把很多复杂的问题化简成很简单的模型,而这使得实现相当美观,为了激励自己继续钻研下去,也希望总结一些得失,我打算从今天开始陆续写一个《简与美》系列。 脑中的数学是抽象的,手中的数学是简单的。 上周做一个分词器。一个普通的分词器,对中文和英文进行自动切分,并标注词性。主要的技术就两点,词典的构造和切词模型的训练。 词典的构造要基于分词器对词典的要

2009-10-11 10:28:00 1741 2

分布式系统工程实践_taobao

分布式系统工程实践,淘宝核心团队的作品,可读性不错。

2010-11-22

隐含马尔科夫模型论文

隐含马尔科夫模型论文,北京大学计算语言实验室课件

2008-10-12

C++模板

C++模板,一本不错的模板编程资料书籍。

2008-02-24

空空如也

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

TA关注的人

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