- 博客(13)
- 资源 (24)
- 收藏
- 关注
原创 Nginx学习之十四-GDB调试Nginx初试
本文的测试环境:Win7+虚拟机VMWareVMware-workstation-full-7.1.4-385536+Ubuntu12.04Nginx-1.4.0要想有效的研究Nginx源码,必须要动手调试,GDB就是有用的利器。下面简要介绍用GDB调试Nginx的一个小例子。本文完成了这样的工作:跟踪worker子进程,观察worker子进程阻塞在何处。然后利用w
2013-07-19 18:11:41 14306 1
原创 【C++】由指针常量和常量指针引发的问题
今天在写一个C++程序的时候,要用到STL的set容器,而且我想让它利用自定义的排序准则来实现自动排序。而且set中元素类型是指向自定义的结构体的指针。结果运行总是出错。下面先贴出起初的代码:#include #include using namespace std;typedef struct test_t{ int a; int b;}test;class
2013-07-18 21:30:20 3792 1
原创 Nginx学习之十三-负载均衡-IP哈希策略剖析
前面介绍过nginx负载均衡的加权轮询策略(http://blog.csdn.net/xiajun07061225/article/details/9318871),它是Nginx负载均衡的基础策略,所以一些初始化工作,比如配置值转储,其他策略可以直接复用他。在后面的初始化的代码中将可以看到。IP哈希初始化IP哈希的初始化函数ngx_http_upstream_init_i
2013-07-15 17:29:28 24143 3
原创 Nginx学习之十二-负载均衡-加权轮询策略剖析
本问介绍的是客户端请求在多个后端服务器之间的均衡,注意与客户端请求在多个nginx进程之间的均衡相区别(Nginx根据每个工作进程的当前压力调整它们获取监听套接口的几率,那些当前比较空闲的工作进程有更多机会获取到监听套接口,从而客户端的请求到达后也就相应地被它捕获并处理)。如果Nginx是以反向代理的形式配置运行,那么对请求的实际处理需要转发到后端服务器运行,如果后端服务器有多台,如何选择一台合适
2013-07-13 15:52:19 48084 6
原创 Nginx学习之十一-Nginx启动框架处理流程
Nginx启动过程流程图下面首先给出Nginx启动过程的流程图:ngx_cycle_t结构体Nginx的启动初始化在src/core/nginx.c的main函数中完成,当然main函数是整个Nginx的入口,除了完成启动初始化任务以外,也必定是所有功能模块的入口之处。Nginx的初始化工作主要围绕一个类型为ngx_cycle_t类型的全局变量(cycle)
2013-07-12 11:24:54 15731
转载 Nginx学习之十-超时管理(定时器事件)
Nginx事件管理主要是网络事件和定时器事件。下面介绍定时器事件管理,即超时管理。为什么要进行超时管理Nginx有必要对可能发生超时的事件进行统一管理,并在事件超时时作出相应的处理,比如回收资源,返回错误等。举例来说,当客户端对nginx发出请求连接后,nginx机会accept()并建立对应的连接对象、读取额护短请求的头部信息。而读取这个头部信息显然是要在一定的时间内
2013-07-09 19:03:37 14749 3
原创 Nginx学习之九-负载均衡(客户端请求与Nginx进程间负载均衡)
负载均衡问题的产生在nginx中,建立连接的时候,会设计负载均衡问题。在多个子进程争抢处理一个新连接事件时,一定只有一个worker子进程最终会成功建立连接,随后它会一直处理这个连接直到连接关闭。那么,就有可能出现这样的情况:有的子进程建立并处理了大部分连接,而有的子进程只处理了少量连接。这对多核CPU架构下的应用是很不利的。因为子进程之间应该是平等的,每个子进程应该尽量独占一个CPU
2013-07-08 15:19:09 7283 1
原创 Nginx学习之八-惊群问题
惊群问题(thundering herd)的产生在建立连接的时候,Nginx处于充分发挥多核CPU架构性能的考虑,使用了多个worker子进程监听相同端口的设计,这样多个子进程在accept建立新连接时会有争抢,这会带来著名的“惊群”问题,子进程数量越多越明显,这会造成系统性能的下降。一般情况下,有多少CPU核心就有配置多少个worker子进程。假设现在没有用户连入服务器,
2013-07-06 21:37:18 12811 3
原创 【Linux学习】epoll详解
什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44),它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。 epoll的相关
2013-07-05 11:50:42 152987 26
原创 Nginx学习之七-模块ngx_epoll_module详解(epoll机制在nginx中的实现)
本文结合实际代码介绍事件驱动模块接口与epoll用法是如何结合起来发挥作用的。Nginx中ngx_epoll_module模块基于epoll实现了Nginx的事件驱动。模块定义(src/event/ngx_epoll_module.c):ngx_module_t ngx_epoll_module = { NGX_MODULE_V1, &ngx_epoll_modu
2013-07-05 11:30:50 16294 2
原创 笔试面试常考数据结构-单链表常用操作编程实现
单链表是笔试以及面试手写代码中常考的数据结构之一。下面实现了单链表的常见操作:创建单链表、删除节点、打印单链表(包括正向打印以及逆向打印)、反转单链表、找出单链表的倒数第K个节点、合并两个有序单链表等操作。代码(C++)://笔试面试单链表常用操作编程实现#include #include #include using namespace std;//单链表节点数据结
2013-07-04 20:50:06 9034 4
原创 Nginx学习之六-nginx核心进程模型
一、Nginx整体架构正常执行中的nginx会有多个进程,最基本的有master process(监控进程,也叫做主进程)和woker process(工作进程),还可能有cache相关进程。一个较为完整的整体框架结构如图所示:二、核心进程模型启动nginx的主进程将充当监控进程,而由主进程fork()出来的子进程则充当工作进程。nginx也可以
2013-07-04 11:22:23 16232 6
原创 Nginx学习之四-Nginx进程同步方式-自旋锁(spinlock)
自旋锁简介Nginx框架使用了三种消息传递方式:共享内存、套接字、信号。Nginx主要使用了三种同步方式:原子操作、信号量、文件锁。基于原子操作,nginx实现了一个自旋锁。自旋锁是一种非睡眠锁。如果某进程视图获得自旋锁,当发现锁已经被其他进程获得时,那么不会使得当前进程进入睡眠状态,而是始终保持进程在可执行状态,每当内核调度到这个进程执行时就持续检查是否可以获取到所锁。
2013-07-02 10:27:31 7896
OpenGL中VAO(vertex array object)介绍
2012-06-03
画图工具(VS2008实现)
2011-07-23
TCP/IP三卷【第二卷】2
2010-08-15
TCP/IP三卷【第二卷】1
2010-08-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人