自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

可乐爱上咖啡

致力于高性能服务器和小众语言的研究-个人笔记杂货摊

原创 欢迎访问我的新个人网站,博客也搬家了。

个人网站: http://www.bigendian123.com/

2013-10-01 11:00:38 4778 1

原创 Nginx SPDY patch实现

前不久Nginx官方放出了SPDY的patch,到目前为止都还未合并进nginx源码,主要还是由于此patch还远不成熟,代码和功能都还不足够完善。个人感觉spdy patch合并进nginx源码还有些时日。本文是基于目前的patch,初窥一下nginx官方是如何在实现spdy。 ...

2012-07-14 16:51:53 7677 1

原创 Google SPDY介绍

本文主要是参考Google SPDY项目主页的一些文档总结而来,目的整体上介绍SPDY协议的定义为主。后续,我将写一系列的文章分析SPDY的一些项目(如:Nginx),SPDY的性能测试以及如何部署SPDY到实际生产应用。 一、HTTP协议存在的一些主要问题 1、一个连接一个请求。浏览器和...

2012-07-09 12:13:52 10850 3

转载 The C10k problem —— 高性能服务器开发必读

保存链接于此,方便自己查看 the c10k problem

2012-06-02 00:14:02 5548 0

原创 Nginx定时器的实现及定时事件的使用

nginx提供一套高效的定时器实现,除了nginx核心能够使用定时器以外,我们在进行模块开发的时候也可以使用定时器来完成一些定时执行的任务。nginx定时器实现的核心是使用一棵红黑树来存储各个定时事件,每次循环的时候就从这棵树里找出超时的事件,然后一一触发,完成定时任务操作。下面简单的描述一下ng...

2012-06-01 21:29:32 24899 0

原创 GBK和UTF-8的粗暴判断

最近遇到一些url中携带没有encode掉的汉字,并且这样的url有的是utf-8编码,有的又是gbk编码。最终这些url被记录下来的时候,必然就有一类url是乱码了。有人说,汉语博大精深,可恰恰也是这些博大精深的东西时不时的让我们伤透脑筋。我认为这种url编码的情况,最专业的手法应该是url上有...

2012-05-26 13:21:17 7458 2

原创 bash基础编程总结

bash应该是目前Linux上最流行的shell脚本解释程序了(还有个shell叫dash,我太讨厌这个东东了。),只要你在linux上工作,并且希望自己能够工作得更愉悦,那么你应该熟悉最基本的bash编程,因为它将给你的工作带来足够的幸福感。本文将总结一些我自己平时使用的bash基本编程知识,和...

2012-05-09 19:48:14 9950 0

原创 小玩TinyCC (aka tcc)

tcc是一个轻量级的C语言编译器,根据官方介绍,完全支持ANSI C,甚至可以用它来编译linux内核。tcc最显著的特点就是编译速度快,产生的可执行程序小,并且能够像脚本一样执行C代码。可惜的是作者现在貌似不再开发tcc了,目前最新版本是0.9.25。           tcc的使用方法和...

2012-03-11 19:25:37 6802 0

原创 Go语言学习笔记4——struct

原计划这篇是写函数的,翻来覆去的研究函数,也没找到什么感悟,于是就写struct吧。这可是个好家伙阿,一个非玩具的C系统中,绝对是struct的天下,可Go更是青出于蓝胜于蓝。         struct在Go中基本总是和type一起出现,Go的type关键字相似于C中的typedef,给一个...

2012-03-04 19:50:57 9452 0

原创 Go语言学习笔记3——控制语句

有人说,程序是这个世界上最简单的东西,因为你只需要知道if、for、switch就足够了。事实上,程序也是由判断和循环两种语句组成。程序员更喜欢和机器打交道,而不是和人打交道,是因为程序的世界里更简单,更单纯,没有复杂的关系,是1不会为0、是真也不会为假,一切的一切都是那么真实,不虚幻。此刻,我坚...

2012-03-02 21:13:52 3952 0

原创 Go语言学习笔记2——数组和Slice

在任何一门语言里,数组应该都是非常基础的类型了,使用率当然也应该是很高的。go不但提供了数组,而且还在数组这个类型之上加了一层包装,这个包装也就是slice。         go的数组变量(也就是数组名)是真真实实的数组,而不是一个指向数组内存起始位置的指针,也不能和同类型的指针进行转化,这一...

2012-02-29 22:18:01 19919 1

原创 Go语言学习笔记1——认识

go是一门编译型语言,而不是基于虚拟机的解释型语言,不谈编译和解释的性能问题,只是主观情感上觉得编译而产生的可执行程序与操作系统之间浑然天成。就好比戴套与不戴套的问题。go除了编译型和C语言神似以外,还有着很多的共同点,都说go就是c的加强版,因此我觉得go应该会受到很多c语言程序员的青睐,至少我...

2012-02-28 14:17:59 4367 1

转载 gcc参数详解

感谢 fence的分享,原文链接:http://www.cnblogs.com/fence/archive/2009/12/18/1627138.html 转载过来,便于自己查看。 gcc and g++分别是gnu的c & c++编译器   gcc/g++在执行编译工作...

2011-12-15 12:00:24 3047 0

原创 web.py性能测试

一直从事后台系统的开发工作,对web、甚至前端技术一无所知;为了响应leader提出的多面手号召,决定一探前端技术。由于个人对python是情有独钟,毅然决定从python web开发下手。在众多的python web框架中,我看上了简单、轻量的web.py,没有特别喜欢的原因,

2011-07-22 22:12:36 10209 2

原创 奇怪的流量差

最近在开发一个消息中间件,使用了hbase作为存储引擎。今天在进行性能测试的时候发现一个极其诡异的现象:client向我们server拿数据的时候,server网卡的进出流量极其不均,进来的流量居然跑满了网卡,出去才30M左右(server进来的流量是从hbase scan数据,出去的流量是se...

2011-06-24 23:56:00 3525 0

原创 第一个Nginx filter模块

以前一直写的都是nginx的handler模块,包括线上服务器都是handler模块,还没有真正写过filter模块,这里就张贴一个filter模块的骨架,方便自己以后查阅。这个入门级的filter只是简单的在响应body尾添加上字符串“Nginx”。 #include #include #inc...

2011-06-12 15:15:00 7301 1

原创 如何从一个nginx的http请求中获取server端地址?

如果你正在从事nginx的模块开发,可能需要获取服务器端的ip地址。我在改进淘宝日志服务器的nginx模块时,就碰到需要从request中读取到接收这个请求的网卡ip。一开始,我试图如下方式直接从请求中获取地址:struct sockaddr_in *sin = NULL;/*type of r ...

2011-06-12 14:25:00 8306 2

原创 nginx配置文件解析过程之神图

<br />所谓神图就是只有自己才能看懂的图,哈哈。此图描述的是nginx配置文件解析过程生成的内存模型图,所有的配置数据,模块handler等信息都是存储在这个图中的。<br /> <br /><br /> <br /> 

2011-04-24 12:58:00 6184 4

原创 thrift小试牛刀

在Apache上http://thrift.apache.org/,thrift如是简单的介绍了自己:Thrift is a software framework for scalable cross-language services development. It combines a sof...

2011-01-25 13:13:00 4523 0

原创 2010年度总结-在淘宝的半年日子

2010是自己人生当中的又一个非常重要的转折点——我离开了美丽的象牙塔,踏上了工作岗位。 6月底,我离开了生活了4年的大学,登上了飞往杭州的航班。那一刻,我才明白:“4年后的今天我居然只带走了回忆,除此再无别的;如果大学可以重来,我也许会做出另外一种选择;好像每个踏出校园的同学,都有和我一样...

2011-01-02 16:40:00 8022 21

原创 Nginx源码分析-内存池

转载申明:本文可以任意转载,但需注明原文地址,谢谢! Nginx的内存池实现得很精巧,代码也很简洁。总的来说,所有的内存池基本都一个宗旨:申请大块内存,避免“细水长流”。 一、创建一个内存池 nginx内存池主要有下面两个结构来维护,他们分别维护了内存池的头部和数据部。此处数据部就是...

2010-12-24 21:57:00 4814 2

原创 Nginx源码分析-4个重要结构之间的关系

Nginx源码之中有着很多很多的结构,当然每一个结构都是非常重要的,本文将分析其中的4个结构之间的关系。这4个结构分别是:listening、connection、event以及request。

2010-12-19 15:43:00 3364 3

原创 Nginx源码分析-Epoll模块

Linux平台上,Nginx使用epoll完成事件驱动,实现高并发;本文将不对epoll本身进行介绍(网上一堆一堆的文章介绍epoll的原理及使用方法,甚至源码分析等),仅看一下Nginx是如何使用epoll的。

2010-12-11 19:01:00 7846 0

原创 Nginx源码分析-connections数组

本文的标题让我纠结了好久,不知道是connections数组合适,还是connections链表更合适;Nginx在此或多或少的注入了二者的特点,先不管是叫数组还是叫链表吧,只要能够弄明白这个connections是怎么回事就大功告成。Nginx的每个worker进程都使用一个相同的connect...

2010-11-28 19:22:00 4124 2

原创 Nginx源码分析-事件循环

事件循环这个概念貌似在windows编程中提得更多,Linux程序却很少提及这个概念。本文所提及的事件循环其实就是worker cycle,由于此处将关注的不再是worker进程,而是worker进程在循环过程中关于事件处理的环节,因此就盗用了事件循环这个概念。在具体看代码前,先看一下这个“循环”...

2010-11-21 22:02:00 5399 2

原创 Nginx源码分析-事件驱动的初始化

Nginx的高性能应该算是事件驱动的功劳。Nginx事件处理的相关代码位于src/event目录中,事件驱动是Nginx的核心,所以代码量相对也比较大。事件驱动初始化的过程主要由下图中的三步组成。

2010-11-21 22:00:00 5091 0

原创 Nginx源码分析-master和worker进程间的通信

前面单独分析了master进程和worker的工作情况,本文就大概看一下master进程和worker进程之间是如何使用channel来完成通信的。这部分实现的源码主要分布于src/os/unix/channel.h和channel.c两个文件中。实现极其简单,没有什么复杂的逻辑。下面,我绘制了一...

2010-11-17 14:08:00 9891 1

原创 Nginx源码分析-进程管理之worker进程

上一篇博文分析了master进程,本文着手分析一下worker进程的情况。首先找到worker进程的入口地方——ngx_worker_process_cycle。这个函数不光是worker进程的入口函数,同时也是worker进程循环工作的主体函数,看函数名含有一个cycle嘛。进入这个cycle函...

2010-11-16 22:29:00 5220 4

原创 Nginx源码分析-进程管理之master进程

Nginx虽然有着多种进程模型,但生产环境一般都是用master-worker模型来工作。本文着重分析Nginx的master进程做了哪些事情,它是如何管理好各个worker进程的。我们知道在main函数中完成了Nginx启动初始化过程,启动初始化过程中的一个重要环节就是解析配置文件,回调各个配置...

2010-11-11 09:44:00 6990 1

原创 Nginx源码分析-启动初始化过程(二)

在Nginx启动初始化过程(一)中提到main函数会调用ngx_init_cycle()初始化一个全局cycle变量,本文就来看看这个ngx_init_cycle()函数究竟做了哪些初始化工作。ngx_cycle_t结构类型被定义在src/core/ngx_cycle.h文件中,多达23个成员变量...

2010-11-07 17:26:00 5315 2

原创 Nginx源码分析-启动初始化过程(一)

Nginx的启动初始化在src/core/nginx.c的main函数中完成,当然main函数是整个Nginx的入口,除了完成启动初始化任务以外,也必定是所有功能模块的入口之处。Nginx的初始化工作主要围绕一个类型为ngx_cycle_t类型的全局变量(cycle)展开。下面具体看一下main函...

2010-11-04 17:02:00 4488 3

原创 nginx源码分析-链表

nginx封装的list和我们在学习数据结构时的list略有点区别。nginx的list算是数组和链表的结合。其用以下两个结构来维护一个list。struct ngx_list_part_s { void *elts; ngx_uint_t ...

2010-07-22 21:54:00 3154 0

原创 Nginx源码分析-数组

俄罗斯大牛在nginx中给我们封装了非常好用的数组,在做nginx模块开发的时候,不必再使用原始的数组了。nginx使用以下结构来维护数组 struct ngx_array_s { void *elts; ngx_uint_t nelts; size...

2010-07-19 20:52:00 5897 4

原创 闲着没事,山寨个记事本玩

2009-08-06 14:30:00 2114 3

原创 “引用”学习笔记

2009-06-03 21:50:00 992 0

原创 python中设置字符编码

2009-06-01 21:43:00 5832 0

原创 第一个python CGI程序——hello,world

2009-06-01 17:33:00 2809 1

原创 正确放置inline函数

2009-06-01 17:25:00 1175 0

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